您好我正试图从我的列表中删除不需要的变量。 这是我的功能:
(defun remove-vars (list)
(loop for x in list do
(print x))))
我想传递这个(get-vars '(A (NOT B) C))
并打印出来
A
B
C
但我正在打印
A
(NOT B)
C
Nil
有没有办法从列表中删除括号和not?如果列表更大,并且b c d我想删除所有not和括号的实例,那么任何指导都会受到赞赏。我想是什么伪代码将循环检查“x”中是否存在“()”然后从列表中删除
答案 0 :(得分:2)
一个简单的解决方案是将列表展平并删除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))
希望有所帮助
答案 1 :(得分:1)
您当前的代码无条件地遍历并打印列表中的每个元素。
当你传递(A (NOT B) C)
时,它会打印每个元素,其中一个是列表(NOT B)
,循环正在打印该列表。打印机输出括号,表示正在打印的元素是列表。
你需要一些逻辑来检查每个元素是否是你想要不打印的东西,比如符号NOT
或者nil,当你看到你想要进一步检查的东西时,你需要进行递归,例如作为清单。