【发布时间】:2012-09-20 15:07:26
【问题描述】:
所以我昨天开始学习 Lisp 并开始做一些问题。
我很难做的事情是在列表中插入/删除原子,同时保持列表相同:(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)))))
【问题讨论】:
-
请注意,Common Lisp 中有一个
delete函数。它没有上述行为。如果您定义自己的函数delete,那么行为不再由 Common Lisp 标准定义,并且基本上取决于您的 Lisp 在这种情况下所做的任何事情。当然,您可以制作自己的符号包(一种命名空间),其中包含delete符号,与cl:delete无关。