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

Ken*_*llB 7 tree clojure zipper

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

拉链可以吗?

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

Art*_*ldt 7

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

  • 反复调用zip/next,直到找到您要查找的节点.
  • 然后打电话zip/path找出你相对于根的位置.
  • 然后调用zip/up,zip/down,zip/left等去修改节点.
  • 更新节点
  • 调用zip/root以获取包含这些更改的新地图.