The result now is as desired:

({"a" {"b" 1, "c" 2}, "children" [{"a" {"b" 3, "c" 4}, "children" []}]} 
{"a" {"b" 5, "c" 6}, "children" []} {"a" {"b" 7, "c" 8}, "children" ({"a" 
{"b" 10, "c" 10}, "children" []} {"a" {"b" 9, "c" 10}, "children" []})})

But now the updated children is using list notation, not vector. Is it ok 
or it is for displaying purposes?

Thanks a lot for your help. I was burning to know how to do that with 
Zippers. I want to understand zippers.

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.

Reply via email to