La coma se usa en el contexto de una lista con comillas invertidas (también conocida como cuasicotipada), que le permite evaluar algunas partes de la lista de forma selectiva. Vea también este hilo para ver un ejemplo de uso para backquoting.
Un par de ejemplos simples:
(setq a "a's value" b "b's value" c "c's value")
'(a b c) ; => (a b c)
`(,a b ,c) ; => ("a's value" b "c's value")
Las comas a las que se refiere están en una definición de macro que, a su vez, utiliza un comillas invertidas progn
:
(defmacro add-annoying-arrows-advice (cmd alternatives)
`(progn
(add-to-list 'annoying-commands (quote ,cmd))
(put (quote ,cmd) 'aa--alts ,alternatives)
(defadvice ,cmd (before annoying-arrows activate)
(when annoying-arrows-mode
(aa--maybe-complain (quote ,cmd))))))
,cmd
dentro de la cita posterior le permite poner el valor de cmd
en lugar de el símbolo cmd
.
progn
significa que tienes que poner una coma delante de las cosas que quieres evaluar, sin importar cuán lejos estén anidadas. (El,cmd
está dentro de otra lista, no directamente dentro(progn)
.)