Macros 我该怎么写一个“我该怎么写?”;“定义”;Clojure中的宏?

Macros 我该怎么写一个“我该怎么写?”;“定义”;Clojure中的宏?,macros,clojure,Macros,Clojure,我在练习编写宏,但似乎无法使defn工作 我的语法是:(我的定义名称参数体) 忽略¶meters和递归例程,如何将名称绑定到(fn[parameter]body)?您需要进行转换 (my-define <name> <args> <body>) 您可以使用macroexpand在repl中查看宏扩展为什么。例如,(宏扩展(defn foo[]1))。这在调试您自己的宏以及尝试学习clojure/core宏时都很有用。还可以使用(source defn

我在练习编写宏,但似乎无法使
defn
工作

我的语法是:
(我的定义名称参数体)


忽略¶meters和递归例程,如何将名称绑定到(fn[parameter]body)?

您需要进行转换

(my-define <name> <args> <body>)

您可以使用
macroexpand
在repl中查看宏扩展为什么。例如,
(宏扩展(defn foo[]1))
。这在调试您自己的宏以及尝试学习clojure/core宏时都很有用。还可以使用
(source defn)
直接检查源代码。这不便于在正文中使用多个窗体的函数,也不便于使用docstring。对于多个窗体,请使用拼接运算符(@)->~@body
(def <name> (fn <args> <body>))
(defmacro my-define [name args body]
  `(def ~name (fn ~args ~body)))