lisp - 给定函数的参数过多

标签 lisp

我遇到了一个错误,我不明白为什么...... “给 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/

相关文章:

lisp - 如何在 Lisp 中对 1000 以下可被 3 或 5 整除的所有数字求和?

lisp - 在这种情况下我如何使用 "loop for"?

Clojure:有人制作了一个工具来可视化代码的树结构吗?

functional-programming - 如何判断变量的值是否是绑定(bind)到 Scheme 中的过程的符号?

c - 是否有可能将类似 Lisp 的宏构建成命令式语言?

lisp - 如何在拆分字符串后修剪以在 Lisp 中列出

clojure - Clojure 中的 :foo、::foo、::bar/foo 和 :bar/foo 之间有什么区别?

c - 是否可以在 C 中使用 Lisp 语法和前缀表示法?

lisp - 用于回文的小型 lisp 程序的困难

Emacs/AUCTeX : Rewriting the Okular-make-url function to work with new synctex (full path + "./") syntax