Hi Moe, I have this structure:
[{"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" 9 "c" 10} "children" []} {"a" {"b" 10 "c" 10} "children" []}]}] That is only a sample, the actual data is bigger is properly more one or two nesting in the children attribute. I need to find a map by a criteria, say where b = 10 ({"a" {"b" 10 "c" 10} "children" []}) Once it is found, I need to change its position within its parent. The parent is {"a" {"b" 7 "c" 8} I know that zippers are for editing data structures but I'm not sure how to do it. Thanks for help and time. On Friday, August 21, 2015 at 7:14:13 PM UTC+2, Moe Aboulkheir wrote: > > Hussein, > > I don't get an NPE passing that to traverse, but nothing much > interesting happens either. The top-level data structure (and the > vectors within "children") aren't associative, and so don't pass the > branch? test (contains? % "children"). > > You could certainly extend the zipper to cover both cases, but there > may well be a more compact way to accomplish your goal. What do you > want to do with the piece of data? > > Take care, > Moe > > On Fri, Aug 21, 2015 at 5:57 PM, Hussein B. <hubag...@gmail.com > <javascript:>> wrote: > > Here is my zipper: > > > > (z/zipper #(contains? % "children") #(get % "children") (fn [_ c] c) > s) > > > > On Friday, August 21, 2015 at 6:49:25 PM UTC+2, Moe Aboulkheir wrote: > >> > >> Hussein, > >> > >> How are you constructing your zipper, before passing it to traverse? > >> Note that clojure.zip doesn't work on arbitrary data structures > >> without being given some information about how to descend > >> into/construct nodes, etc. - i.e. z/next expects a zipper, and your > >> data structure isn't a zipper, but an input to a zipper. Unless > >> you've written a zipper you omitted from your post, zipping over maps, > >> in particular, may not be as convenient as you're imagining. > >> https://clojuredocs.org/clojure.zip/zipper has helpful examples in it. > >> > >> Take care, > >> Moe > >> > >> On Fri, Aug 21, 2015 at 5:06 PM, Hussein B. <hubag...@gmail.com> > wrote: > >> > Hi, > >> > > >> > I changed println to z/node , this time I'm getting: > >> > > >> > NullPointerException clojure.zip/branch? (zip.clj:73) > >> > > >> > On Friday, August 21, 2015 at 5:56:10 PM UTC+2, Moe Aboulkheir wrote: > >> >> > >> >> Hussein, > >> >> > >> >> The println inside (recur) will return nil. > >> >> > >> >> Take care, > >> >> Moe > >> >> > >> >> On Fri, Aug 21, 2015 at 4:35 PM, Hussein B. <hubag...@gmail.com> > wrote: > >> >> > Hi, > >> >> > > >> >> > I have this structure: > >> >> > > >> >> > (def s [{"n" {"id" "a"} "d" 2 "children" [{"n" {"id" "c"} "d" 4 > >> >> > "children" > >> >> > []}]} {"n" {"id" "b"} "d" 3 "children" []}]) > >> >> > > >> >> > > >> >> > > >> >> > And I wrote a function with zippers to traverse it: > >> >> > > >> >> > (defn traverse [col] > >> >> > (loop [z col] > >> >> > (if (= (z/next z) z) > >> >> > z > >> >> > (if (z/branch? z) > >> >> > (recur (z/next z)) > >> >> > (recur (-> z println z/next)))))) > >> >> > > >> >> > > >> >> > But I'm getting: NullPointerException clojure.zip/next > >> >> > (zip.clj:236) > >> >> > > >> >> > Any ideas? > >> >> > > >> >> > Thanks for help. > >> >> > > >> >> > -- > >> >> > You received this message because you are subscribed to the Google > >> >> > Groups "Clojure" group. > >> >> > To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com. > >> >> > For more options, visit https://groups.google.com/d/optout. > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups "Clojure" group. > >> > To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com. > >> > For more options, visit https://groups.google.com/d/optout. > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to clo...@googlegroups.com > <javascript:> > > Note that posts from new members are moderated - please be patient with > your > > first post. > > To unsubscribe from this group, send email to > > clojure+u...@googlegroups.com <javascript:> > > 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+u...@googlegroups.com <javascript:>. > > For more options, visit https://groups.google.com/d/optout. > -- 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.