Zipper

Zipper

困难

说明

为二叉树创建一个 zipper。

Zippers 是一种纯函数式的导航和操作数据结构的方式。它本质上包含一个数据结构和一个指向该数据结构的指针(称为焦点)。

例如,给定一棵玫瑰树(每个节点包含一个值和一个子节点列表),zipper 可以支持以下操作:

  • from_tree(从玫瑰树中得到一个 zipper,焦点在根节点上)
  • to_tree(从 zipper 中得到玫瑰树)
  • value(获取焦点节点的值)
  • prev(把焦点移到同一父节点下的上一个子节点,返回一个新的 zipper)
  • next(把焦点移到同一父节点下的下一个子节点,返回一个新的 zipper)
  • up(把焦点移到父节点,返回一个新的 zipper)
  • set_value(设置焦点节点的值,返回一个新的 zipper)
  • insert_before(在焦点节点前插入一棵新的子树,它成为焦点节点的 prev,返回一个新的 zipper)
  • insert_after(在焦点节点后插入一棵新的子树,它成为焦点节点的 next,返回一个新的 zipper)
  • delete(移除焦点节点及其所有子树,焦点会移到 next 节点,如果不行则移到 prev 节点,再不行则移到父节点,返回一个新的 zipper)
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Haskell Exercism

准备好开始 Zipper 了吗?

注册 Exercism,借助 107 个练习 和真人导师指导,学习并掌握 Haskell,全部免费。