Common Lisp:递归函数返回nil



我正在尝试编写一个递归返回列表负值的函数。这就是我目前所拥有的:

(defun neg-nums (L)
(if (null L) nil
(let ((X (neg-nums (cdr L))))
(if (< (car L) 0) (append (list (car L)) X)))))
(print (neg-nums (list 1 -2 3 -4)))

我在递归之外尝试了let函数,它工作得很好,所以我知道它与尝试使其递归有关。现在,它只在应该输出(-2-4(的时候输出NIL。

(PS,打印功能是这样的,当我把它作为文件加载时,我可以立即看到结果。(

如有任何帮助,我们将不胜感激。

抱歉,我刚刚意识到我需要在最后一行多加一个X。正确的答案是:
(defun neg-nums (L)
(if (null L) nil
(let ((X (neg-nums (cdr L))))
(if (< (car L) 0) (append (list (car L)) X) X))))
(print (neg-nums (list 1 -2 3 -4)))

最新更新