(defun simplify (x)
(if (and (not (null x)) (listp x))
(if (and (equal '(car x) '(cadr x)) (equal '(car x) 'not))
(simplify (cddr x))
(cons (car x) (simplify (cdr x)))
)
'nil
)
)
这个 lisp 函数旨在将表达式作为参数,然后从中删除多余的 'not's 并返回它。它检查参数是否为非空列表,如果不是则返回 nil(基本情况)。如果它非空,我想检查 car(x) = car(cdr(x)) = 'not'。如果没有检测到它们是一对“不是”,那么它应该递归并建立在一个列表上以返回。如果检测到它们都是“非”,那么它应该仍然递归但也跳过 car(x) 和 car(cdr(x))。现在所有这些代码所做的只是返回一个与参数相同的表达式,所以我认为问题是我在嵌套 if 语句中的条件没有正确设置,我如何检查 car(x) 和 cadr(x)两者都是'不是'?