Работаете с несколькими списками? - PullRequest
1 голос
/ 31 января 2010

На странице 224 из Common Lisp: Нежное введение в символьные вычисления этот пример приведен с выводом.


> (mapcar #'(lambda (x y) (list x 'gets y))
     '(fred wilma george diane)
     '(job1 job2 job3 job4))

((FRED GETS JOB1)
(WILMA GETS JOB2) 
(GEORGE GETS JOB3)
(DIANE GETS JOB4))

Есть ли способ сделать то же самое в Emacs Lisp? Другой пример также интересен тем, что выводятся только 3 результата - количество элементов в самом коротком списке.


> (mapcar #'+ '(1 2 3) '(10 20 30 40 50))
(11 22 33)

1 Ответ

2 голосов
/ 31 января 2010

Emacs имеет mapcar* в пакете cl, который делает именно это. Вот документация:

Примените FUNCTION к каждому элементу SEQ и составьте список результатов. Если есть несколько SEQ, FUNCTION вызывается с таким количеством аргументов, и отображение останавливается, как только самый короткий список заканчивается. Только с одним SEQ, это похоже на mapcar. С несколькими это как Common Lisp mapcar функция расширена для произвольных типов последовательностей.

...