因此,我正在实现一个函数,它获取项目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)的函数”

10-06 02:45