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

Reply via email to