Thanks Meikel, James and Rob for your inputs. I'm gonna use the simple function provided by James and maybe try to come up with a better word than flatten ;o)
2011/2/21 rob levy <[email protected]> > That is, had flattening actually been your goal. It seem like you didn't > really want to throw out that structure, just transform it, so flattening is > irrelevant I guess other than the subject line. :) > > On Mon, Feb 21, 2011 at 5:34 PM, rob levy <[email protected]> wrote: > >> One way to approve the problem is to write a function to convert the >> nested maps into nested seqs. Once it is in that form you can use flatten on >> it and partition the flat list as you like: >> >> (defn flatten-maptree [m] >> (letfn [(maptree->seqtree >> [m] >> (lazy-seq >> (cond >> (map? m) (map #(cons >> (key %) >> (maptree->seqtree (val %))) >> m) >> :else [m])))] >> (flatten (maptree->seqtree m)))) >> >> >> user=> (partition 4 (flatten-maptree {1 {2 {3 4 5 6} 7 {8 9}}})) >> ((1 2 3 4) (5 6 7 8)) >> >> >> On Mon, Feb 21, 2011 at 3:25 PM, James Reeves <[email protected]>wrote: >> >>> On 21 February 2011 07:17, Damien <[email protected]> wrote: >>> > Not sure if I should talk about flattening but basically I'm trying to >>> > achieve the following transformation: >>> > >>> > user=>(flatten-tree {1 {2 {3 4 5 6} 7 {8 9}}}) >>> > ((1 2 3 4) (1 2 5 6) (1 7 8 9)) >>> > >>> > Any suggestion? >>> >>> (defn flatten-tree [t] >>> (if (map? t) >>> (for [[k v] t, w (flatten-tree v)] >>> (cons k w)) >>> (list (list t)))) >>> >>> In this case, I think using protocols would be over-engineering. We >>> can always add protocols in later if we happen to need them. That's >>> one of the benefits of protocols as compared to Java's interfaces. >>> >>> - James >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to [email protected] >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> To unsubscribe from this group, send email to >>> [email protected] >>> 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 post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- Damien Lepage http://damienlepage.com -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
