gpt4 book ai didi

recursion - 用于检查列表中的值的 Lisp 递归函数不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:24 24 4
gpt4 key购买 nike

我正在研究一个递归函数,它接受一个列表和一个值 ex: 'b '(a.b),如果找不到则返回 nil,如果找到则返回 t。我的问题在行 (cond ((eq A (car L)) t) 中,它似乎在 (cond ((and (atom L (eq A L)) t) 返回后检查该条件。我在印象是,如果满足该条件,执行将停止,函数将返回。有什么办法可以解决这个问题吗?另外,我只能使用原始函数德芬条件缺点车光盘运算符 +、-、< 和 >无效的当量 list 原子符号p

;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))
)
)
)

最佳答案

除非您使用明确的(return-from checkInner value) 表达式,否则函数会返回其最后一个表达式的值。所以你的函数返回的唯一值是最后一个 cond 表达式;前两个测试被忽略。

您需要将所有情况合并到一个 COND 表达式中。

此外,第二个测试不应使用。如果 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)))))

关于recursion - 用于检查列表中的值的 Lisp 递归函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58598863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com