有人可以举例说明clojure.zip的编辑功能是如何工作的吗?

时间:2014-10-08 23:36:02

标签: clojure binary-tree zipper

我是clojure的新手,我正在使用clojure.zip,并且无法弄清楚如何在其中使用编辑功能。如果有人能给我一个如何运作的实例,那将非常有帮助。

比方说,我有一个二叉树

    45
10     57

如何编辑值57并将其更改为75

1 个答案:

答案 0 :(得分:2)

假设一个嵌套向量的结构,其中第一个元素是值,第二个是左子,第三个是右子,这可以工作:

(let [btree [45 [10] [57]]
      root-loc (zip/zipper vector? rest
                           (fn [[x _ _] children]
                             (vec (cons x children)))
                           btree)]
  (-> root-loc
      zip/down
      zip/right
      (zip/edit (fn [node]
                  (assoc-in node [0] 75)))
      zip/root))
;=> [45 [10] [75]]