我正在做一个递归函数,它接受一个列表和一个值ex:'b‘(a.b),如果没有找到,则返回nil,如果找到,则返回t。我的问题是在行(cond ((eq A (car L)) t)中,它似乎在(cond ((and (atom L (eq A L)) t)返回之后检查那个条件。我的印象是,如果满足该条件,执行将停止,函数将返回。有什么办法解决这个问题吗?而且,我只能使用原语函数functions car cdr运算符+,-,<,和> null eq listp atom symbolp
;test cases
(checkInner 'b '(a . b))
(checkInner 'f '(c e f))
(checkInner 'b '(b))
;function
(defun checkInner(A L)
(cond ((and (atom L) (eq A L)) t)
)
(cond ((or (atom L) (eq A L)) nil)
)
(cond ((eq A (car L)) t)
(t (checkInner A (cdr L))
)
)
)发布于 2019-10-29 06:00:12
除非使用显式(return-from checkInner value)表达式,否则函数将返回其上一个表达式的值。因此,函数返回的惟一值是最后一个cond表达式;前两个测试被忽略。
您需要将所有案例组合到一个COND表达式中。
另外,第二个测试不应该使用or。如果L是一个原子,它将不等于L,因为我们在前面的例子中测试了它。
(defun checkInner(A L)
(cond ((and (atom L) (eq A L)) t)
((atom L) nil)
((eq A (car L)) t)
(t (checkInner A (cdr L)))))https://stackoverflow.com/questions/58598863
复制相似问题