2015-04-04 55 views
1

我不能使用所有的lambda函数,因为我得到这个错误: 应用/ funcall的参数不是一个函数:(LAMBDA(E)(COUNT_ATOMS M E))。如何在LISP中定义LAMBDA函数?

而且代码:

> (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

这里有什么问题?

+0

哈哈完美!谢谢一堆! – Alex 2015-04-04 22:17:25

+0

@WillNess:您应该将其作为答案发布,而不是评论。 – b4hand 2015-04-04 22:34:01

回答

1

使用(MAPCAR #'(LAMBDA (e) (count_atoms m e)) ...,带有“尖锐”符号。与apply相同,请使用#'+

写作#'(lambda ....)与写作(function (lambda ....))相同。还有一个宏lambda,它可以让你在那里写作(lambda ...)

还看到: