Emacs è dotato di Common Lisp library, che introduce un sacco di funzioni Common Lisp e macro, ma con la cl-
prefisso. Non c'è motivo di evitare questa libreria. cl-mapcar
è ciò che si vuole:
(cl-mapcar '+ '(1 2 3) '(10 20 30)) ; (11 22 33)
Con dash
biblioteca lista di manipolazione (vedi installation instructions), è possibile utilizzare -zip-with
(ricordate: -zip-with
è lo stesso cl-mapcar
applicato a 2 liste):
(-zip-with '+ '(1 2 3) '(10 20 30)) ; (11 22 33)
Non conosco un modo elegante per implementare un equivalente -zip-with
per 3 argomenti. Ma è possibile utilizzare -partial
da dash-functional
pacchetto, che viene fornito con dash
(funzioni da dash-functional
richiedere Emacs 24). -partial
vale in parte la funzione, in modo da questi 2 invocazioni funzione qui sotto sono equivalenti:
(-zip-with '+ '(1 2) '(10 20)) ; (11 22)
(funcall (-partial '-zip-with '+) '(1 2) '(10 20)) ; (11 22)
Quindi, è possibile utilizzarlo con una funzione -reduce
:
(-reduce (-partial '-zip-with '+) '((1 2 3) (10 20 30) (100 200 300)))
; (111 222 333)
si può avvolgere in una funzione con &rest
parola chiave , quindi questa funzione accetta una quantità variabile di argomenti anziché una lista:
(defun -map* (&rest lists)
(-reduce (-partial 'zip-with '+) lists))
fonte
2014-08-03 22:55:11