Comment puis-je corriger la macro simple foo
dans (elisp)Eval During Expansion?eval lors de l'expansion de la macro lisp emacs
Aucun des travaux de followings:
(defmacro foo1 (a)
`(setq (eval ,a) t))
(defmacro foo2 (a)
`(setq ,(eval a) t))
(defmacro foo3 (a)
`(setq ,a t))
Je ne comprends pas ce qui est dit dans (elisp)Eval During Expansion. Je pense que si j'avais compris, j'aurais pu réparer la macro.
Mise à jour: La solution de Huaiyuan fonctionne:
(defmacro foo7 (a)
`(set ,a t))
(setq x 'b
a 'c)
(foo7 x)
(assert (eq b t))
(assert (eq x 'b))
(foo7 a)
(assert (eq a 'c))
(assert (eq c t))
(macroexpand '(foo7 x)) ; ==> (set x t)
(macroexpand '(foo7 a)) ; ==> (set a t)
Votre foo4 est identique à foo3. – Yoo
Alors c'est le cas! J'ai même cherché ça! – Vatine