Oh, I defined my zipper as:
(def loz (z/zipper #(contains? % "children") #(get % "children") (fn [_ x ] x) {"children" z})) But is throwing an exception. This one works: (def loz (z/zipper #(get % "children") #(get % "children") (fn [_ x ] x) {"children" z})) On Monday, August 24, 2015 at 4:08:17 PM UTC+2, Moe Aboulkheir wrote: > > Went off half-cocked there. The remainder: > > (edit-parents > #(= 10 (get-in % ["a" "b"])) > #(update % "children" reverse), > data-zipper) > > Would have the effect of reversing the order of the children in each node > which possesses a child having a "b" attribute set to 10. You could > probably express this much better with a library which allows locations in > data structures to be described in an XPath-like way (and your data > actually looks a lot like it is the result of parsing markup - see > clojure.data.xml and xml-zip if so) -- or there's probably some better > zipper approach that somebody who's really into zippers could come up with. > > If you don't want to depend on an external library, and you lose your > enthusiasm for zippers, you could write a function which goes over the > structure and returns pairs of [[path] attributes], where path is a > sequence of keys/indices suitable for passing to update-in/assoc-in etc., > and attributes is the value of the "a" key at each level. > > In general, if there aren't multiple keys similar to "a" in each map (i.e. > it's always some value pointing to some map, and the value is not always > "a"), this kind of layout may be easier (e.g. to destructure) > > {:tag "a" :attrs {:b 10} :children [...]}} > > Take care, > Moe > -- 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/d/optout.