The built-in vector-zip will build a tree with a different structure than what I need. I want build a tree as described in the first post: the node value is the first element of the vector and the children the rest of the elements.
zipper.core> (loop [loc (tree-zipper [1 2 [3 4 5]])] (if (z/end? loc) (z/root loc) (do (println (z/node loc)) (recur (z/next loc))))) [1 2 [3 4 5]] 2 [3 4 5] 4 5 [1 2 [3 4 5]] zipper.core> (loop [loc (z/vector-zip [1 2 [3 4 5]])] (if (z/end? loc) (z/root loc) (do (println (z/node loc)) (recur (z/next loc))))) [1 2 [3 4 5]] 1 2 [3 4 5] 3 4 5 [1 2 [3 4 5]] On Tuesday, November 26, 2013 11:56:45 PM UTC, martin_clausen wrote: > > With a nested vector tree you can use the built in vector-zip function to > create your zipper. > > As to the editing, the source > code<https://github.com/clojure/clojure/blob/master/src/clj/clojure/zip.clj> > contains > a very similar use-case, which can be adapted to something like the > following: > > (let [vz (vector-zip [1 2 [3 4 5]])] > (loop [loc vz] > (if (end? loc) > (root loc) > (recur (next (if (and (integer? (node loc)) (odd? (node loc))) > (replace loc (* 2 (node loc))) > loc)))))) > > > [2 2 [6 4 10]] > > On Tuesday, November 26, 2013 10:50:34 PM UTC+1, dabd wrote: >> >> I am trying to work with a tree representation using vectors where the >> first element is the node value and the rest are the children as suggested >> here: >> >> http://grokbase.com/t/gg/clojure/12afy2cz9p/how-to-represent-trees-for-use-with-zippers >> >> However I am having trouble using clojure.zip/edit to change a simple >> tree. I'd like to multiply the odd numbers by 2 in this case. >> https://gist.github.com/dabd/7666778 >> >> It looks like after editing the first (branch) node clojure.zip/next will >> get to the end of the tree. >> How can I correct this code? >> >> Thanks. >> >> -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.