8
我正在練習編寫宏,我似乎無法獲得defn
的工作。我該如何在Clojure中編寫一個「defn」宏?
我的語法是:(my-define name parameter body)
忽略&參數和遞歸程序,如何將名字綁定到一個(FN [參數]體)?
我正在練習編寫宏,我似乎無法獲得defn
的工作。我該如何在Clojure中編寫一個「defn」宏?
我的語法是:(my-define name parameter body)
忽略&參數和遞歸程序,如何將名字綁定到一個(FN [參數]體)?
您將需要改造
(my-define <name> <args> <body>)
到
(def <name> (fn <args> <body>))
這是很簡單的實際上是:
(defmacro my-define [name args body]
`(def ~name (fn ~args ~body)))
你可以用`macroexpand`在REPL看什麼宏擴展到。例如。 `(macroexpand'(defn foo [] 1))`。這對於調試自己的宏以及嘗試從clojure/core宏中學習都很有用。 – liwp 2012-02-09 15:34:29
也可能使用`(源碼defn)`直接檢查源代碼。 – dqc 2017-06-16 13:17:25