我遇到了一个错误,我不明白为什么...... “给 ULTIMO 的论据太多” 该函数的目的是返回列表的最后一个元素
(defun ultimo (lst)
(cond ((= 1 (length lst))
(first lst)))
(t
(ultimo (rest lst))))
最佳答案
括号有问题。该函数应该这样定义:
(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
函数,因为它是通过访问整个列表来执行的,
关于lisp - 给定函数的参数过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33023389/