我想编写一个宏,sym-def该宏具有与特殊形式相同的行为,def但是使用(symbol "c"),例如,作为第一个参数。
我的第一步是
(def (symbol "c") 4)
Run Code Online (Sandbox Code Playgroud)
但这返回了错误First argument to def must be a Symbol。
我的第二步是
(eval `(def ~(symbol "c") 4))
Run Code Online (Sandbox Code Playgroud)
c在全球环境中成功将其定义为4。为什么第二步成功却第一步失败了?
最后,我尝试编写所需的宏
(def (symbol "c") 4)
Run Code Online (Sandbox Code Playgroud)
但这有一个“坏” macroexpand
(eval `(def ~(symbol "c") 4))
Run Code Online (Sandbox Code Playgroud)
以便
(defmacro sym-def [sym value] `(def ~sym ~value))
Run Code Online (Sandbox Code Playgroud)
失败,出现与我第一步相同的错误。
编写宏的正确方法是什么?