【发布时间】:2014-11-05 04:50:09
【问题描述】:
所以我正在实现一个函数,该函数在 LISP (Allegro mlisp) 中为一个项目获取列表的前 n 个元素,但我似乎无法弄清楚为什么我不能进行减法计算。我不断得到
我的这个方法的代码是,它在监听器中编译得很好
(defun get_upto (n cut_list)
(if (= n 0) cut_list
(cons (car cut_list) (get_upto ((- n 1) (cdr cut_list))))))
但如果我尝试执行
$: (get_upto 3 '(1 2 3 4 5))
我得到了错误
Error: Illegal function object: (- n 1)
我在这里做错了什么?我传入一个数字,检查 n = 0 没有问题。
【问题讨论】:
-
在最后一行中有很多括号说明为什么它认为你想使用 (- n 1) 作为函数。
-
您可能希望将退出语句更改为
(= n 0) nil -
Common Lisp 要求您正确填写括号。这与您可能习惯的其他语言不同。括号改变程序的含义。它们绝不是可选的或毫无意义的。
标签: function types lisp common-lisp