Zipper készítése bináris fához.
A zipperek tisztán funkcionális módját kínálják annak, hogy egy adatszerkezetben navigáljunk és azt módosítsuk. Lényegében egy adatszerkezetet és egy arra mutató pointert tartalmaznak (ezt nevezzük fókusznak).
Például egy rózsafa esetén (amelynek minden csomópontja egy értéket és a gyermekcsomópontok listáját tartalmazza) egy zipper a következő műveleteket támogathatja:
from_tree (zippert készít egy rózsafából, a fókusz a gyökércsomóponton van)to_tree (kiveszi a rózsafát a zipperből)value (visszaadja a fókuszcsomópont értékét)prev (a fókuszt az ugyanazon szülő előző gyermekére mozgatja,
új zippert ad vissza)next (a fókuszt az ugyanazon szülő következő gyermekére mozgatja, új
zippert ad vissza)up (a fókuszt a szülőre mozgatja, új zippert ad vissza)set_value (beállítja a fókuszcsomópont értékét, új zippert ad vissza)insert_before (új részfát szúr be a fókuszcsomópont elé, ez lesz a
fókuszcsomópont prev-je, és új zippert ad vissza)insert_after (új részfát szúr be a fókuszcsomópont után, ez lesz a
fókuszcsomópont next-je, és új zippert ad vissza)delete (eltávolítja a fókuszcsomópontot és az összes részfáját; a fókusz a
next csomópontra kerül, ha lehetséges, egyébként a prev csomópontra, ha
lehetséges, egyébként a szülőcsomópontra, és új zippert ad vissza)A Zipper funkcionális módot kínál egy Node-fa bejárására.
Minden Zipper-hívásnak egy új Zipper objektumot kell visszaadnia.
Ha a Zipper nem változtat értékeket (azaz nem hívtak meg Set* metódust), akkor ugyanazt a mögöttes fát kell használnia.
Amikor meghívnak egy Set* metódust, az új Zippernek új fával kell rendelkeznie, az eredeti fát változatlanul hagyva.
Azoknak a Zipper-hívásoknak, amelyek érvénytelen Node-ra állítják a fókuszt, hibát kell visszaadniuk.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Go nyelvet 35 fogalom167 feladat segítségével, valódi emberi mentorálással, mindez ingyen.