2009-07-25 26 views
8

我正在練習編寫宏,我似乎無法獲得defn的工作。我該如何在Clojure中編寫一個「defn」宏?

我的語法是:(my-define name parameter body)

忽略&參數和遞歸程序,如何將名字綁定到一個(FN [參數]體)?

+1

你可以用`macroexpand`在REPL看什麼宏擴展到。例如。 `(macroexpand'(defn foo [] 1))`。這對於調試自己的宏以及嘗試從clojure/core宏中學習都很有用。 – liwp 2012-02-09 15:34:29

+0

也可能使用`(源碼defn)`直接檢查源代碼。 – dqc 2017-06-16 13:17:25

回答

18

您將需要改造

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

(def <name> (fn <args> <body>)) 

這是很簡單的實際上是:

(defmacro my-define [name args body] 
    `(def ~name (fn ~args ~body))) 
相關問題