我们有两种定义函数的方法: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)