此问题涉及并且是问题37484870的后续行动:
考虑以下代码
(defn f [x]
(loop [a x v [(inc x)]]
(if (> a 0)
(recur (dec a) (conj [a] v))
v)))
(def v (z/vector-zip (f 10))
其中z指clojure.zip。请注意,10可能是一个更大的数字。
现在,我如何使用API中的函数为clojure.zip添加一个节点,以便结果等于
((def v (z/vector-zip (f (inc 10)) ?
因此,节点将被添加到最深层的最左侧节点(如果有帮助的话)。
提出这个问题的原因是对问题37484870的回答 意味着一个10的循环
(z/down)
(z/right)
功能,但拉链结构可能提供更直接的解决方案。
答案 0 :(得分:2)
可能的解决方案之一是
(-> v
(#(let [next (z/next %)]
(if (z/end? next)
%
(recur next))))
(#(z/insert-right % [(inc (z/node %))]))
(z/root))