删除不需要的变量
Removing unwanted variables
您好,我正在尝试从列表中删除不需要的变量。
这是我的功能:
(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
有没有办法从列表中删除括号和非?如果列表更大且带有 a b c d 我想删除所有 not 和括号的实例,我们将不胜感激。我猜想循环检查“( ) 或 x 中是否存在”然后从列表中删除它们的伪代码是什么
您当前的代码无条件地循环并打印列表的每个元素。
当您传递它 (A (NOT B) C)
时,它会打印每个元素,其中之一是列表 (NOT 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))
希望对您有所帮助
您好,我正在尝试从列表中删除不需要的变量。 这是我的功能:
(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
有没有办法从列表中删除括号和非?如果列表更大且带有 a b c d 我想删除所有 not 和括号的实例,我们将不胜感激。我猜想循环检查“( ) 或 x 中是否存在”然后从列表中删除它们的伪代码是什么
您当前的代码无条件地循环并打印列表的每个元素。
当您传递它 (A (NOT B) C)
时,它会打印每个元素,其中之一是列表 (NOT 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))
希望对您有所帮助