gpt4 book ai didi

recursion - Lisp 中的返回值

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

所以我昨天开始学习 Lisp 并开始做一些问题。

我很难做的是在列表中插入/删除原子,同时保持列表不变 ex: (delete 'b '(g a (b) l)) 将给出我 (g a () l)

我也遇到了这个问题。我想检查原子是否存在于列表中的任何位置。

我追踪它,它说它在某一时刻返回 T,但随后被 nil 覆盖。

你们能帮忙吗:)?

我正在使用 (appear-anywhere 'a '((b c) g ((a))))

在第 4 次函数调用时,它返回 T 但随后变为 nil

(defun appear-anywhere (a l)
(cond
((null l) nil)
((atom (car l))
(cond
((equal (car l) a) T)
(T (appear-anywhere a (cdr l)))))
(T (appear-anywhere a (car l))(appear-anywhere a (cdr l)))))

最佳答案

让我们来看一个明显的问题:

(defun appear-anywhere (a l)
(cond
((null l) nil)
((atom (car l))
(cond
((equal (car l) a) T)
(T (appear-anywhere a (cdr l)))))
(T (appear-anywhere a (car l))(appear-anywhere a (cdr l)))))

想想上面的最后一行。

让我们稍微改变一下格式。

(defun appear-anywhere (a l)
(cond
((null l) nil)
((atom (car l))
(cond
((equal (car l) a) T)
(T (appear-anywhere a (cdr l)))))
(T
(appear-anywhere a (car l))
(appear-anywhere a (cdr l)))))

最后三行:因此,作为默认值(这就是 T 存在的原因),将计算最后两种形式。首先是第一个,然后是第二个。第一种形式的值从不使用或返回。

这可能不是您想要的。

目前,当 a 的值出现在列表其余部分的任何位置时,您的代码只会返回一些内容。第一种形式从未真正使用过。

提示:什么是正确的逻辑连接器?

关于recursion - Lisp 中的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515540/

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