2011-05-11 50 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