Lisp 删除不需要的变量
嗨,我正在尝试从列表中删除不需要的变量。 这是我的职责:Lisp 删除不需要的变量,lisp,common-lisp,Lisp,Common Lisp,嗨,我正在尝试从列表中删除不需要的变量。 这是我的职责: (defun remove-vars (list) (loop for x in list do (print x)))) 我想通过这个(获取vars'(A(不是B)C)) 并打印出来 A B C 但我却在打印 A (NOT B) C Nil 有没有办法从列表中删除括号和not?如果列表中有一个b c d较大,我希望删除所有not和括号的实例,请提供任何指导。我猜什么样的伪代码可以循环检查“()”是否存在于x中
(defun remove-vars (list)
(loop for x in list do
(print x))))
我想通过这个(获取vars'(A(不是B)C))
并打印出来
A
B
C
但我却在打印
A
(NOT B)
C
Nil
有没有办法从列表中删除括号和not?如果列表中有一个b c d较大,我希望删除所有not和括号的实例,请提供任何指导。我猜什么样的伪代码可以循环检查“()”是否存在于x中,然后从列表中删除它们您当前的代码无条件地循环并打印列表中的每个元素 当您传递它时,它将打印每个元素,其中一个元素是列表
(不是B)
,循环将打印该列表。括号由打印机输出,表示正在打印的元素是一个列表
您需要一些逻辑来检查每个元素是否是您不希望打印的元素,如符号
not
或nil,并在看到需要进一步检查的元素时向下递归,如列表。一个简单的解决方案是展平列表并删除not,如下所示:
(defun flatten (var-list)
(cond ((null var-list) nil)
((atom var-list) (list var-list))
(t (mapcan #'flatten var-list))))
(defun get-vars (var-list)
(remove 'NOT (flatten var-list)))
(get-vars '(A (NOT B) C))
希望能有所帮助引号不是数据结构的一部分<代码>'(abc)不是列表,
(abc)
是列表。引用仅用于阻止评估。我理解,我键入它就像在REPL中键入一样,主要是出于习惯。谢谢你的编辑和评论。我还想我应该更清楚地说明括号不是列表的一部分,而是由打印机打印的,所以我现在就这么做。括号不能删除。它们只是打印列表的产物。如果有一个列表,Lisp需要用括号括起来<代码>非,A
,B
。。。不是列表中的变量,而是符号。