有人能举例说明clojure.zip的编辑功能是如何工作的吗?
我是clojure的新手,当时我正在使用clojure.zip,无法理解如何使用其中的编辑功能。如果有人能给我一个工作的例子,它是如何工作的,这将是非常有帮助的 比如说,我有一棵二叉树有人能举例说明clojure.zip的编辑功能是如何工作的吗?,clojure,binary-tree,zipper,Clojure,Binary Tree,Zipper,我是clojure的新手,当时我正在使用clojure.zip,无法理解如何使用其中的编辑功能。如果有人能给我一个工作的例子,它是如何工作的,这将是非常有帮助的 比如说,我有一棵二叉树 45 10 57 如何编辑值57并将其更改为75,假定嵌套向量的结构中第一个元素是值,第二个元素是左子元素,第三个元素是右子元素,这将起作用: (let [btree [45 [10] [57]] root-loc (zip/zipper vector? rest
45
10 57
如何编辑值57并将其更改为75,假定嵌套向量的结构中第一个元素是值,第二个元素是左子元素,第三个元素是右子元素,这将起作用:
(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]]
如果你首先展示你是如何创建二叉树的,这会很有帮助。但是假设你已经用拉链导航到了“57”的位置,那么你会用如下方式使用
edit
:(zip/edit location#)(Integer/parseInt(apply str(reverse(str%'))))
75只是一个随机数,但我确实知道你想告诉我什么。但是您的标题询问了edit
函数,我的观点是edit不会直接替换为值;它采用一个将原始值转换为替换值的函数。要简单地用另一个数字替换一个数字,您可以使用replace
。哦,好吧,这需要一个函数!这是关键,我将尝试输入一个函数,看看如何使用它。有许多编辑的例子。