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.

Reply via email to