因此,我正在实现一个函数,它获取项目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,并将结果作为第一个参数传递给get_upto
”
(get_upto (- n 1) (cdr cut_list))
但你有这个:
(get_upto ((- n 1) (cdr cut_list)))
即“从n减去1,并将计算结果用作第一个参数为
(cdr cut_list)
的函数”