मैं Huet Zipper पढ़ रहा हूँ अंदर नेविगेट करने के लिए कैसे, मैं go_up विधि समझ में नहीं कर सकते हैं:एक HUET जिपर
let go_up (Loc(t,p)) = match p with
Top -> failwith "up of top"
| Node(left,up,right) -> Loc(Section((rev left) @ (t::right)),up);;
अन्य प्रकार के पूर्ण स्रोत परिभाषाओं, लिंक किए गए पत्र में पाया जा सकता है अगर आप समझते हैं जिपर , मुझे लगता है कि मेरे प्रश्न का उत्तर देना कोई फर्क नहीं पड़ता।
जो मुझे जिपर के बारे में पता है, Location
में वर्तमान नोड और Path
या तथाकथित Context
शामिल है। Path
में वर्तमान नोड और उसके उपन्यासों के अलावा अन्य कुछ भी है, या कुछ लोगों ने इसे a one-hole-context
कहा है।
ठीक है, फोकस ऊपर ले जाना, इसका मतलब है कि वर्तमान नोड का मूल नोड नया वर्तमान नोड बन जाएगा। लेकिन यहां, लेखक वर्तमान नोड्स और उसके भाई बहन को जोड़ता है। लेकिन यह माता-पिता नोड नहीं है, केवल माता-पिता नोड के बच्चे हैं। स्कैला में अपनी खुद की चालअप विधि को लागू करते समय मैं यहां पर फंस गया हूं, और वर्तमान नोड के मूल नोड का सही ढंग से प्रतिनिधित्व करने में विफल रहा हूं।
आपको मेरा पूर्व एन-आरी जिपर कार्यान्वयन से प्रेरणा मिल सकती है: http://gist.github.com/3477576 – ron
@ron आपका संदर्भ हमेशा माता-पिता नोड डेटा का संदर्भ रखता है, इस पेपर से संदर्भ 'टी। मैंने माता-पिता के संदर्भ को रखने के बजाय दूसरों को देखा है, वे एक अभिभावक स्थान रखते हैं, जो आपको माता-पिता नोड तक पहुंचने का मौका भी देता है। – Sawyer
यदि आप किसी अन्य भाषा में पोर्टिंग करते हैं तो आपको परवाह नहीं है, लेकिन 'rev foo @ bar' को' List.rev_append foo bar 'लिखा जाने से लाभ होगा, जो दो बार की बजाय एक बार' foo' को पार करेगा। वास्तविक पेरेंट नोड का उत्पादन करने के लिए – gasche