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