使用Clojure拉链在树中查找节点的位置

时间:2014-02-01 00:05:38

标签: clojure tree zipper

我有一棵结构未知的树。首先,我想找到一个包含一串文本“Something”的节点。然后,在识别字符串在树中的位置之后,我想要更新相对于字符串位置的的不同节点。数据是一个深度嵌套的地图,包含多个列表分支。

拉链可以吗?

我研究了这种编辑树的方法:http://www.exampler.com/blog/2010/09/01/editing-trees-in-clojure-with-clojurezip/。问题是,我事先没有知道字符串的位置。

1 个答案:

答案 0 :(得分:7)

是的!这正是设计用于拉链的任务拉链。

  • 反复拨打zip / next,直到找到您要查找的节点。
  • 然后致电zip/path以找出您相对于根的位置。
  • 然后调用zip/upzip/downzip/left等来转到要修改的节点。
  • 更新节点
  • 致电zip/root以获取包含这些更改的新地图。