Huet Zipperを読んでいますが、go_upメソッドを理解できません。
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);;
他のタイプの定義の完全なソースはリンクされたペーパーで見つけることができます、あなたがジッパーを理解しているなら、それは私の質問に答えることは問題ではないと思います。
私がZipperについて知っていることから、aLocation
には現在のノードとそのPath
またはいわゆる 。が含まれていContext
ます。Path
には、現在のノードとそのサブノード、または一部の人々がそれを呼んだ以外のすべてがありますa one-hole-context
。
フォーカスを上に移動すると、現在のノードの親ノードが新しい現在のノードになります。ただし、ここでは、作成者は現在のノードとその兄弟を連結します。ただし、これは親ノードではなく、親ノードの子だけです。Scalaで独自のmoveUpメソッドを実装するときにここで立ち往生し、現在のノードの親ノードを正しく表すことができませんでした。