2009-11-24 17 views
39

क्लोजर में एक पेड़ का प्रतिनिधित्व करने के लिए एक बेवकूफ तरीका क्या होगा? उदा .:क्लोजर में एक पेड़ का प्रतिनिधित्व

 A 
    /\ 
    B C 
    /\ \ 
D E F 

प्रदर्शन महत्वपूर्ण नहीं है और पेड़ पिछले 1000 तत्वों में नहीं बढ़ेगा।

+27

WTF पर Clojure डेटा संरचनाओं पर रिच हिक्की के वीडियो आप लोगों के साथ गलत है, हर बार जब कोई प्रश्न पसंद नहीं है वे पास टक्कर मार दी। स्टैक ओवरफ्लो कुछ सीखने के लिए एक बहुत अच्छी जगह थी, अब यह कई बेवकूफों के साथ digg में बदल गया है। यदि आपको इस सवाल को पसंद नहीं है कि वोट के लिए क्या वोट है। –

+4

उन्होंने इसे बंद करने के लिए वोट दिया, क्योंकि यह एक सटीक डुप्लिकेट है। – Rayne

+1

सहमत; यह * पसंद * प्रश्न के बारे में नहीं है; जैसा कि आप कुछ सीख रहे हैं - शायद आखिरी बार से सीखें कि किसी ने एक ही सवाल पूछा है? –

उत्तर

5

का उपयोग कर बस cons यह करने का एक डरावना तरीका उपलब्ध नहीं है:

(defn mktree 
    ([label l r] (cons label (cons l r))) 
    ([leaf] (cons leaf (cons nil nil)))) 
(defn getlabel [t] (first t)) 
(defn getchildren [t] (rest t)) 
(defn getleft [t] (first (getchildren t))) 
(defn getright [t] (rest (getchildren t))) 

ध्यान दें कि बच्चों को एक सूची नहीं है; यह एक जोड़ी है यदि आपके पेड़ सिर्फ बाइनरी नहीं हैं, तो आप इसे एक सूची बना सकते हैं। निश्चित रूप से कोई बाएं या दायां बच्चा नहीं होने पर शून्य का उपयोग करें।

अन्यथा, this answer देखें।

अपने चित्र में पेड़:

(mktree 'A (mktree 'B (mktree 'D) (mktree 'E)) (mktree 'C nil (mktree 'F))) 
+1

यह कार सीडीआर –

+0

धन्यवाद के स्थान पर पहले और बाकी है;) सामान्य लिस्प में दोनों हैं। मैं संपादित करूंगा। हालांकि इसमें 'विपक्ष' है? –

+0

मुझे लगता है कि आपको यह कहना चाहिए कि "मुझे केवल सामान्य लिस्प" पता है। आम लिस्प 'लिस्प' नहीं है। यह * ए * लिस्प है। – Rayne

3

पेड़ सिर्फ Clojure में सब कुछ के बारे में underly क्योंकि वे खुद को लगातार डेटा संरचना में संरचनात्मक साझा करने के लिए इतनी अच्छी तरह से उधार दे। मानचित्र और वेक्टर वास्तव में पेड़ लुकअप और समय सम्मिलित करने के लिए एक उच्च शाखा कारक वाले पेड़ हैं। तो सबसे छोटा जवाब जो मैं दे सकता हूं (हालांकि यह वास्तव में उपयोगी नहीं है) यह है कि मैं वास्तव में इस प्रश्न के वास्तविक उत्तर के लिए Purely functional data structures by Chris Okasaki की अनुशंसा करता हूं। इसके अलावा blip.tv

(set 'A 'B 'C) 
संबंधित मुद्दे