1

我们有两种定义函数的方法:defun 和 lambda,我们可以使用 setf 来标记 lambda 函数。

(defun g (x) (* x x)) 
(setf f (lambda (x) (+ x x)))

该函数可以是列表中的第一个元素。

(g 3)
9

或者它可以是另一个函数的参数。

(mapcar #'g '(1 2 3))
(1 4 9)    

但是对于 lambda,用法是不同的。

(funcall f 3)
6

(mapcar f '(1 2 3))
(2 4 6)

我很好奇这些差异背后的逻辑是什么?

与方案相当一致的用例相比,它更加令人困惑。

> (define (g x) (+ x x))
> (g 3)
6
> (map g '(1 3 4))
(2 6 8)

> (define f (lambda (x) (* x x)))
> (f 2)
4
> (map f '(1 2 3))
(1 4 9)
4

1 回答 1

3

参见 Kent Pitman 的论文Technical Issues of Separation in Function Cells and Value Cells

于 2013-06-02T02:41:34.040 回答