2009-07-25 17 views
8

मैं मैक्रोज़ लिखने का अभ्यास कर रहा था और मुझे काम करने के लिए defn नहीं मिल रहा है।क्लोजर में मैं "defn" मैक्रो कैसे लिख सकता हूं?

मेरे वाक्य रचना है: (my-define name parameter body)

& मापदंडों और पुनरावर्ती दिनचर्या की अनदेखी करते हुए मैं एक (एफ एन [पैरामीटर] शरीर) को नाम के लिए बाध्य करते हैं?

+1

आप 'का उपयोग कर सकते हैं macroexpand' repl में देखने के लिए क्या कोई मैक्रो फैलता है जैसे '(macroexpand '(defn foo [] 1))'। यह आपके अपने मैक्रोज़ को डिबग करने के साथ-साथ क्लोजर/कोर मैक्रोज़ से सीखने की कोशिश करने में भी उपयोगी है। – liwp

+0

स्रोत कोड का सीधे निरीक्षण करने के लिए '(स्रोत defn)' का भी उपयोग कर सकता है। – dqc

उत्तर

18

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

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

यह वास्तव में बहुत सरल है आप को बदलने के लिए की आवश्यकता होगी:

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

यह शरीर में कई रूपों, और न ही डॉकस्ट्रिंग के साथ कार्यों की सुविधा नहीं देता है। – acron

+0

एकाधिक रूपों के लिए स्प्लिस ऑपरेटर (@) -> ~ @ बॉडी का उपयोग करें – MrOerni

संबंधित मुद्दे