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 <r.p.l...@gmail.com>

> 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 <r.p.l...@gmail.com> 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 <jree...@weavejester.com>wrote:
>>
>>> On 21 February 2011 07:17, Damien <damienlep...@gmail.com> 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 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 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
>



-- 
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 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

Reply via email to