2011-05-11 34 views
8

我敢肯定,這是lisp的一個非常初學者的問題,因爲我只是在學習這門語言。mapcar的多個參數

我在clisp中有一個叫做count的函數。它計算給定原子出現在列表中的次數。我想要做的是能夠使用不同的參數多次調用計數,但要搜索相同的列表。

例如,我想要計算列表中的'A,'B'C的數目。我希望我可以做這樣的事情:

(mapcar 'count '(A B C) myList) 

我已經想通了,這並不工作,因爲每個'(A B C)元素被配對僅在myList中的一個元素。將一個附加輸入參數應用於列表中每個項目的函數的適當慣用方法是什麼?

爲了進一步明確,我希望能夠以'(A B C)'(A A B C C C)作爲輸入併產生(2 1 3)

回答

13

從列表(A B C)與每個項目調用函數count多次,每次計數的匹配項相同的序列mylist

(mapcar (lambda (x) (count x mylist)) '(A B C)) 
+3

這是完美的。正是我在找什麼。非常感謝你!現在讀這個,我看到我可能看了十幾個類似的解決方案,卻沒有真正理解lambda函數在做什麼。現在我看到答案適用於我的具體問題,這更有意義。 – 2011-05-11 05:58:08

+1

感謝分享開悟的時刻!現在是審查[閉包](http://letoverlambda.com/textmode.cl/guest/chap2.html)的好時機。 – 2011-05-11 06:06:13