Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能举例说明clojure.zip的编辑功能是如何工作的吗?_Clojure_Binary Tree_Zipper - Fatal编程技术网

有人能举例说明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

我是clojure的新手,当时我正在使用clojure.zip,无法理解如何使用其中的编辑功能。如果有人能给我一个工作的例子,它是如何工作的,这将是非常有帮助的

比如说,我有一棵二叉树

    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
。哦,好吧,这需要一个函数!这是关键,我将尝试输入一个函数,看看如何使用它。有许多编辑的例子。