Dave, Your first attempt looks OK to me.
(require '(clojure [zip :as z])) (def zipper (z/vector-zip [:A [:B [:D :E]] [:C [:F :G]]])) (defn pre-order [loc] (when-not (z/end? loc) (when-not (z/branch? loc) (println (z/node loc))) (recur (z/next loc)))) user=> (pre-order zipper) :A :B :D :E :C :F :G nil user=> What made you think it didn't work? -mark On Monday, October 15, 2012 9:20:14 PM UTC+1, Dave Kincaid wrote: > > I stumbled across the clojure.zip library today which looks extremely > useful for working with trees. The only problem is I can't figure out how > to represent a tree as a vector so that the zipper will have the correct > structure. For example say I want to work with this tree: > > > <https://lh5.googleusercontent.com/-mq1roiqfqw4/UHxvMDQUIfI/AAAAAAAAA_o/mNA9pAkOEIs/s1600/tree.png> > my first intuition was a vector like this [:A [:B [:D :E]] [:C [:F :G]]] but > that didn't work. Then I thought of something like this: [[:B [:D :E]] :A > [:C [:F :G]]]. It seems like that gets me a little bit closer since now > the zipper at least gets that :A has two children. > > Can anyone help me understand how to represent a tree in a Clojure vector? > Is there a common lispy way of doing this that everyone already knows? It > seems like all of the references I could find online all assume that you > know how to represent a tree already. > > Thanks, > > Dave > -- 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