【问题标题】:Common Lisp: Recursive function returns nilCommon Lisp:递归函数返回 nil
【发布时间】:2021-03-20 19:30:07
【问题描述】:

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

(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,打印功能是这样的,当我将它作为文件加载时,我可以立即看到结果。)

任何帮助将不胜感激。

【问题讨论】:

    标签: recursion lisp


    【解决方案1】:

    抱歉,我刚刚意识到我需要在最后一行添加一个额外的 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)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-18
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      相关资源
      最近更新 更多