2009-07-25 18 views
8

Yazım makroları uyguluyordum ve çalışmak için defn göremiyorum.Clojure'da nasıl "defn" makro yazabilirim?

Benim sözdizimi: (my-define name parameter body)

nasıl (fn [parametre] vücuda) adını bağlamak mı, & parametrelerini ve özyinelemeli rutinleri yok sayarak?

+1

Ne bir makro repl görmek macroexpand' 'kullanabilirsiniz için genişler. Örneğin. '(makroexpand '(defn foo [] 1)). Bu, hem kendi makrolarınızı hata ayıklamak hem de clojure/core makrolarından öğrenmeye çalışmak için yararlıdır. – liwp

+0

Ayrıca kaynak kodunu doğrudan denetlemek için '(kaynak defn)' kullanabilir. – dqc

cevap

18

Bu aslında oldukça basittir

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

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

için Sen dönüştürmek gerekir:

(defmacro my-define [name args body] 
    `(def ~name (fn ~args ~body))) 
+2

Bu, vücutta birden çok form içeren işlevleri veya dokümanları kolaylaştırmaz. – acron

+0

Birden çok form için ekleme işlecini kullanın (@) -> ~ @ body – MrOerni