2015-04-04 60 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 ...)

還看到: