我正在尝试使用一个函数来返回一个普通 lisp 中的函数。但是,我遇到了一个奇怪的情况,我想解释一下。
这就是我想要做的:
(defun makefun(x) ;1
(lambda (z)
(+ x z)))
((makefun 1) 2) ;2
这会导致非法函数调用。但是,以下内容是有效的:
((lambda (z) (+ 1 z)) 2) ;3
(funcall (makefun 1) 2) ;4
为什么我不能像第一个例子那样使用 makefun ?我希望对 2 中的调用进行评估,因此它相当于第 3 行。