2011-03-25 17 views
6

मुझे defadt मैक्रो clojure.contrib.types में मिला है। दुर्भाग्यवश, क्लोजर में एडीटी उपयोग पर कोई उपयोगी दस्तावेज नहीं है। मैंने घंटों तक गुगल किया है और इसके बारे में जानकारी के छोटे टुकड़े पाए हैं। क्लोजर में एडीटी क्या हैं? उनका उपयोग कैसे करें? कोई भी जानकारी सहायक होगी :)क्लोजर बीजगणित डेटा प्रकार

उत्तर

2

कुछ जानकारी examples.clj फ़ाइल में src/clojure/contrib/type में मिल सकती है। यह एक पेड़ संरचना का एक उदाहरण दिखाता है जो एक विज्ञापन:

(defadt ::tree 
    empty-tree 
    (leaf value) 
    (node left-tree right-tree)) 

स्रोत फ़ाइल में अधिक जानकारी।

+1

क्या डिफॉल्ट बहिष्कृत है? –

1

Clojure here में एडीटी के वास्तव में एक दिलचस्प उदाहरण है: हम लिखना तो

data Tree a = Empty 
     | Leaf a 
     | Node Tree Tree 

:

(defmacro data 
    [adt-name equals-sign & constructors] 
    `(do 
    (defn ~(symbol (str adt-name "?")) [~'obj] 
     (= ~(str adt-name) (adt-name ~'obj))) 
    [email protected](for [[type-name & fields] 
      (filter (partial not= '(|)) 
        (partition-by (partial = '|) constructors))] 
     (apply (partial emit-constructor adt-name type-name) 
       fields)))) 

हास्केल उदाहरण को देखते हुए:

हम इस तरह एक एडीटी जनरेटर को परिभाषित क्लोजर

(data Tree = Empty | Leaf value | Node left right) 

जो बहुत अच्छा है।

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