我根本无法使用 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 ... )
就可以了。
另见:
关于lambda - 如何在 LISP 中定义 LAMBDA 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29451956/