【发布时间】:2014-02-19 14:44:42
【问题描述】:
我正在学习 Lisp,我必须编写一个函数,它的返回值是一个列表,其中包含来自给定输入的奇数(如果有的话)。在代码中我有这个:
(defun f3 (a)
(cond
((null a) nil )
((and (numberp (car a)) (oddp (car a))) (cons (car a) (f3 (cdr a))))
(T (f3 (cdr a)))
) ; end cond
)
我本来想用append函数,但是一直报错。
建议我使用 cons 函数。当我这样做时,我的功能开始工作(代码在上面)。我原来有这个:
(defun f3 (a)
(cond
((null a) ())
((and (numberp (car a)) (oddp (car a))) (append (f3 (cdr a)) (car a))))
(T (append () (f3 (cdr a))))
)
)
但不断出错。例如,如果我打电话给(f3 '(1 2 3)),它会说“错误 3 不是 LIST 类型”。所以,我的问题是为什么 cons 在这里起作用,为什么 append 不起作用?缺点是如何工作的?提前致谢。
【问题讨论】: