Tengo packagesvariables que tienen una lista de usuarios de github y nombres de paquetes.
(defvar packages '('("auto-complete" . "auto-complete")
("defunkt" . "markdown-mode")))
Quiero git clonesi el archivo aún no existe.
(defun git-clone (author name)
(let* ((repo-url (concat "[email protected]:" author "/" name ".git")))
(print repo-url)
(unless (file-exists-p (concat "~/.emacs.d/git/" name))
(shell-command (concat "git clone " repo-url " ~/.emacs.d/git/" name)))))
Y quiero aplicar git-clonea todos los paquetes variables a la packageslista. Pero no pude entender cómo aplicar con argumentos.
; This obviously doesn't work
(mapcar `git-clone `packages)

'en tudefvardeclaración.Respuestas:
Puede crear una función lambda anónima para tomar cada elemento de su lista y aplicarle su función.
Ejemplo:
Tenga en cuenta que, si no le importan los valores de retorno (es decir, su función es solo para efectos secundarios, que parece ser el caso aquí), puede usar
mapcen lugar demapcar:Para sus propósitos específicos, un bucle puede ser más simple:
fuente
cl-dolistsobre el llanodolistaquí.funcall.funcallanterior, pero mirando de nuevo parece redundante, ¿por qué no llamartoy-fnxdirectamente?Si está satisfecho con dash.el , puede usar
-eachy desestructurar-let:Alternativamente, puede usar
-lambdadesde dash.el para crear una función anónima con desestructuración:fuente
Sobre la base de la respuesta de Dan , si haces este tipo de cosas con frecuencia, puede ser útil definir una variante 'destacada' de
mapcar, como se hace, por ejemplo, en Python:para que, por ejemplo
fuente