无法从LISP中的数字中减去?

时间:2014-11-05 04:50:10

标签: function types lisp common-lisp

所以我实现了一个函数来获取项目的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,检查没有问题。

1 个答案:

答案 0 :(得分:2)

你有太多的parens!

这是“从n中减去1,并将结果作为第一个参数传递给get_upto

(get_upto (- n 1) (cdr cut_list))

但你有这个:

(get_upto ((- n 1) (cdr cut_list)))

是“从n中减1并将该计算的结果用作第一个参数为(cdr cut_list)的函数”