2

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

比如说我有一棵二叉树

    45
10     57

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

4

1 回答 1

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]]
于 2014-10-09T12:57:17.123 回答