2010-01-31 3 views
1

Sur la page 224 de Common Lisp: A Gentle Introduction to Symbolic Computation cet exemple est donné avec la sortie. Est-il possible de faire la même chose avec Emacs Lisp?Fonctionnement sur plusieurs listes?

 

> (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)) 
 

L'autre exemple est également intéressant car seulement 3 résultats, le nombre d'éléments dans la liste la plus courte, sont produits.

 

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

duplication possible de [Mappage d'une fonction sur deux listes dans elisp] (http://stackoverflow.com/questions/9028696/mapping-a-function-over-two-lists-in-elisp) –

Répondre

2

Emacs a mapcar* dans le paquet cl qui fait exactement cela. Voici la documentation:

Appliquez FUNCTION à chaque élément de SEQ et dressez une liste des résultats. S'il existe plusieurs SEQ, FUNCTION est appelé avec autant d'arguments, et le mappage s'arrête dès que la liste la plus courte est épuisée. Avec juste un SEQ, c'est comme mapcar. Avec plusieurs, c'est comme la fonction Common Lisp mapcar étendue à des types de séquences arbitraires.

Questions connexes