Множество аргументи към mapcar

Сигурен съм, че това е въпрос за много начинаещи в lisp, тъй като тепърва уча езика.

Имам функция в clisp, наречена count. Той отчита колко пъти даден атом се появява в списък. Това, което бих искал да направя, е да мога да извиквам 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).


person Alex Pritchard    schedule 11.05.2011    source източник


Отговори (1)


За да извикате функцията count многократно с всеки елемент от списък (A B C), като всеки път броите съвпадащите елементи в една и съща последователност mylist:

(mapcar (lambda (x) (count x mylist)) '(A B C))
person Terje Norderhaug    schedule 11.05.2011
comment
Това е перфектно. Точно това, което търсих. Благодаря ти много! Четейки това сега, виждам, че вероятно съм разгледал дузина подобни решения, без наистина да разбера какво прави ламбда функцията. Сега, когато виждам отговора, приложен към моя конкретен проблем, има много повече смисъл. - person Alex Pritchard; 11.05.2011
comment
Благодаря, че сподели мига на просветление! Сега е добър момент да прегледате закривания. - person Terje Norderhaug; 11.05.2011