में संरचनात्मक साझाकरण मैं क्लोजर में संरचनात्मक साझाकरण के बारे में अस्पष्ट हूं। नीचे जॉय ऑफ़ क्लोजर (ग्रेट बुक बीटीडब्ल्यू) से लिया गया एक फ़ंक्शन xconj है।क्लोजर
;;Building a naive binary search tree using recursion
(defn xconj [t v]
(cond
(nil? t) {:val v :L nil :R nil}
(< v (:val t)) {:val (:val t) :L (xconj (:L t) v) :R (:R t)}
:else {:val (:val t) :L (:L t) :R (xconj (:R t) v)}))
यदि कोई नीचे दिखाए गए दो पेड़ टी 1 और टी 2 को परिभाषित करता है।
(def t1 (xconj (xconj (xconj nil 5) 3) 2))
(def t2 (xconj t1 7))
यह स्पष्ट है कि वाम सबट्री t1 & t2
user> (identical? (:L t1) (:L t2))
true
द्वारा साझा किया जाता लेकिन एक, एक नया पेड़ t3 बनाने के लिए बाईं सबट्री में एक नया मान '1' डालने से थे t1, इस तरह की:
(def t3 (xconj t1 1))
एक पूरी तरह से नया पेड़ में इस परिणाम के साथ सभी मूल्यों की नकल की होगी और कोई संरचनात्मक साझा करने, या कुछ संरचना अभी भी साझा किया जाएगा? क्या होगा यदि बाएं शाखा बड़ी थी 2-> 3-> 4-> 5-> 6-> 7 (* रूट) और 1 बाएं उपट्री में डाली गई थी, तो संरचना के कुछ साझाकरण जारी रहेगा?
धन्यवाद, निश्चित रूप से, (लेकिन विभिन्न संदर्भों में यह एक बहुत बड़ा फर्क कर सकते हैं एक बार फिर, यहाँ यह भावना क्योंकि कितनी भी छोटी क्यों नोड्स हैं पड़ता है नहीं।) नक्शे अपडेट करने के लिए एक और संक्षिप्त तरीका है। – Jaskirat