我正在阅读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,我认为回答我的问题并不重要。
根据我对 Zipper 的了解,aLocation
包含当前节点及其Path
或所谓的 Context
. 拥有除了当前节点及其子节点之外的Path
所有内容,或者有些人称之为a one-hole-context
。
好吧,将焦点上移,意味着当前节点的父节点将成为新的当前节点。但在这里,作者连接了当前节点及其兄弟节点。但这不是父节点,只是父节点的子节点。在 Scala 中实现我自己的 moveUp 方法时,我被困在这里,并且无法正确表示当前节点的父节点。