在lisp中defun和lambda

时间:2013-06-02 02:29:31

标签: lambda lisp

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

1 个答案:

答案 0 :(得分:3)