बाइनरी ट्री के लिए ज़िपर बनाना।
ज़िपर किसी डेटा स्ट्रक्चर के अंदर घूमने और उसमें बदलाव करने का पूरी तरह फंक्शनल तरीका है। इनमें मूल रूप से एक डेटा स्ट्रक्चर और उस डेटा स्ट्रक्चर के भीतर किसी जगह की ओर इशारा करने वाला एक पॉइंटर होता है, जिसे फोकस कहते हैं।
उदाहरण के लिए, मान लीजिए एक रोज़ ट्री है, जिसके हर नोड के पास एक वैल्यू और चाइल्ड नोड्स का एक ऐरे होता है। ऐसे में ज़िपर में ये ऑपरेशन उपलब्ध हो सकते हैं:
from_tree (रोज़ ट्री से ज़िपर निकालता है, फोकस रूट नोड पर रहता है)to_tree (ज़िपर से रोज़ ट्री निकालता है)value (फोकस नोड की वैल्यू निकालता है)prev (फोकस को उसी पैरेंट के पिछले चाइल्ड पर ले जाता है,
नया ज़िपर लौटाता है)next (फोकस को उसी पैरेंट के अगले चाइल्ड पर ले जाता है, नया
ज़िपर लौटाता है)up (फोकस को पैरेंट पर ले जाता है, नया ज़िपर लौटाता है)set_value (फोकस नोड की वैल्यू सेट करता है, नया ज़िपर लौटाता है)insert_before (फोकस नोड से पहले एक नया सबट्री जोड़ता है, जो उस
फोकस नोड का prev बन जाता है, और नया ज़िपर लौटाता है)insert_after (फोकस नोड के बाद एक नया सबट्री जोड़ता है, जो उस
फोकस नोड का next बन जाता है, और नया ज़िपर लौटाता है)delete (फोकस नोड और उसके सारे सबट्री हटा देता है। फोकस तब next
नोड पर जाता है, अगर वह संभव हो; नहीं तो prev नोड पर, अगर वह संभव हो;
और अगर वह भी संभव न हो, तो पैरेंट नोड पर। यह नया ज़िपर लौटाता है)Exercism पर साइन अप कीजिए और Haskell को 107 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।