gpt4 book ai didi

LISP - 使用分隔符拆分字符串也包含在新列表中

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:20 24 4
gpt4 key购买 nike

我有一个元素列表

("(aviyon" "213" "flyingman" "no))") as list

我想要的是我想使用括号作为分隔符来拆分这个包含字符串的列表,但也想在不破坏顺序的情况下将这些括号包含在新列表中

我想要的新列表输出(或修改后的相同列表)

("(" "aviyon" "213" "flyingman" "no" ")" ")") 

我来自命令式语言,这在 Java 或 C++ 中只需 15 分钟。但是在这里我不知道该怎么做。我知道我必须这样做

1- 在循环中从列表中获取一个元素

我认为这是通过 (nth 1 '(listname) )

完成的

2- 分开而不删除放入新列表的分隔符

我找到了诸如 SPLIT-SEQUENCE 之类的函数,但我不能不删除它并且不破坏原始顺序。

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用 cl-ppcre 库来完成这项工作。

例如:

CL-USER> (ql:quickload :cl-ppcre)

CL-USER> (cl-ppcre:split "([\\(\\)])" "(aviyon" :with-registers-p t)
("" "(" "aviyon")
CL-USER> (cl-ppcre:split "([\\(\\)])" "no))" :with-registers-p t)
("no" ")" "" ")")
CL-USER>

但是,它在列表中生成空字符串。使用 remove-if 函数去除它们:

CL-USER> (defun empty-string-p (s) (string= s ""))
EMPTY-STRING-P
CL-USER> (remove-if 'empty-string-p
(list "no" ")" "" ")"))
("no" ")" ")")

最后,您可以构造一个同时执行这两项操作的函数,并在 命令式 循环中运行它(是的,Common Lisp 并不像许多人认为的那样具有功能性):

CL-USER> (defun remove-empty-strings (l)
(remove-if 'empty-string-p l))
REMOVE-EMPTY-STRINGS
CL-USER> (defun split (s)
(cl-ppcre:split "([\\(\\)])"
s
:with-registers-p t))
SPLIT
CL-USER> (defparameter *the-list* '("(aviyon" "213" "flyingman" "no))"))
*THE-LIST*
CL-USER> (loop for item in *the-list*
for splitted = (split item)
for cleaned = (remove-empty-strings splitted)
append cleaned)
("(" "aviyon" "213" "flyingman" "no" ")" ")")

关于LISP - 使用分隔符拆分字符串也包含在新列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53465588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com