Несколько аргументов для mapcar - PullRequest
9 голосов
/ 11 мая 2011

Я уверен, что это вопрос для начинающих, потому что я только изучаю язык.

У меня есть функция в 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).

1 Ответ

13 голосов
/ 11 мая 2011

Для повторного вызова функции count с каждым элементом из списка (A B C), каждый раз считая совпадающие элементы в одной и той же последовательности mylist:

(mapcar (lambda (x) (count x mylist)) '(A B C))
...