gpt4 book ai didi

scala - 如何在 HUET zipper 内向上导航

转载 作者:行者123 更新时间:2023-12-04 04:12:44 26 4
gpt4 key购买 nike

我正在阅读 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 的了解, Location包含当前节点及其 Path或所谓的 Context . Path拥有除当前节点及其子节点之外的所有内容,或者有人称其为 a one-hole-context .

好吧,将焦点上移,意味着当前节点的父节点将成为新的当前节点。但在这里,作者连接了当前节点及其兄弟节点。
但这不是父节点,只是父节点的子节点。
在 Scala 中实现我自己的 moveUp 方法时,我被困在这里,并且无法正确表示当前节点的父节点。

最佳答案

这里的 zipper 适用于以下树数据类型:

type tree =
Item of item
| Section of tree list;;

论文中的路径数据类型是这样的:
type path =
Top
| Node of tree list * path * tree list;;
Node包含三个组件。位于孔左侧的父节点的子节点 ( left )、更上方的路径 ( up ) 以及位于孔右侧的父节点的子节点 ( right ) .

向上移动时,为了产生实际的父节点,我们必须插入旧树 tleft 之间的正确位置和 right .由于左边的 child 是以相反的顺序存储的,我们必须先将它们反转。

关于scala - 如何在 HUET zipper 内向上导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12129300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com