如何在 LISP 中定义 LAMBDA 函数?

How can I define the LAMBDA function in LISP?

我根本无法使用 lambda 函数,因为出现以下错误: apply/funcall 的参数不是函数:(LAMBDA (E) (COUNT_ATOMS M E)).

代码是:

> (DEFUN count_atoms (m l)
>     (COND ((ATOM l) (COND ((EQUAL m l) 1)
>                       (t 0)))
>       (t (APPLY '+
>                 (MAPCAR '(LAMBDA (e) (count_atoms m e))
>                         l)))))

对于

(count_atoms 3 '( (3 3) 3 (4 4) 5))

它应该打印 3。

这里有什么问题?

使用 (MAPCAR #'(LAMBDA (e) (count_atoms m e)) ...,加上 "sharp" 符号。与apply相同,使用#'+.

#'(lambda .... )和写(function (lambda .... ))是一样的。还有一个宏 lambda 可以让你只写 (lambda ... ) 就可以了。

另见: