给出一个函数的参数太多了

时间:2015-10-08 18:31:34

标签: lisp

我有一个错误,我不明白为什么...... "给予ULTIMO" 此函数的目的是返回列表的最后一个元素

(defun ultimo (lst)
  (cond ((= 1 (length lst))
         (first lst)))
        (t
         (ultimo (rest lst))))

1 个答案:

答案 0 :(得分:4)

括号有问题。应该以这种方式定义函数:

(defun ultimo (lst)
    (cond ((= 1 (length lst)) (first lst))
          (t (ultimo (rest lst)))))

请注意,通过使用可以正确格式化lisp语法的编辑器,很少会发生此类错误。

但是,您的函数无法正确管理空列表情况(它进入无限循环)。正确的版本可能是:

(defun ultimo (lst)
  (cond ((null list) nil)
        ((null (rest list)) (first lst))
        (t (ultimo (rest lst))))

作为旁注,请注意不建议在这样的上下文中使用length函数,因为它是通过访问整个列表来执行的,