I wrote a much better example in order to show what am I trying to do. Of 
course, the following is a simplified version of the actual code in order 
to make things easier for everybody.

(def my-data [{:area "Somewhere" :warehouses
>
>                [{:warehouse "W54321" :containers
>
>                 [{:container "C12345" :boxes
>
>                   [{:box "B12345" :items
>
>                     [{:item "I12345"}]}]}]}]}
>
>               {:area "SomewhereElse" :warehouses
>
>                [{:warehouse "W54321" :containers
>
>                 [{:container "C54321" :boxes
>
>                   [{:box "B54321" :items
>
>                     [{:item "I54321"}]}]}]}]}])
>
>
>> (defn my-func [data]
>
>   (map (fn [area]
>
>          (map (fn [warehouse]
>
>                 (map (fn [container]
>
>                        (map (fn [box]
>
>                               (if (not (empty? (:items box)))
>
>                                 (map (fn [item]
>
>                                        (doSomething (:box box) (:item 
>> item)))
>
>                                      (:items box))
>
>                                 (doSomethingElse (:warehouse warehouse) 
>> (:container container) (:box box))))
>
>                               (:boxes container)))
>
>                      (:containers warehouse)))
>
>               (:warehouses area)))
>
>        data))
>
>
My question is, how can I get rid of the nested loops and replace it with 
something more elegant in clojure.

Thank you for any replies.

On Monday, October 1, 2012 1:16:25 AM UTC+3, arekanderu wrote:
>
> Thank you for your prompt reply Grant.
>
> *> May you share the original code? *
> *
> *
> I will post the original function very soon*
> *
>
> *> Why does my-map have vectors storing maps inside instead of a map with 
> > maps inside? *
> *
> *
> Because each vector will have more than one hash-map and each hash map 
> will have multiple keys. I only posted a simplified version of the map for 
> readability, unless I am missing something here...
> I think of vector as the equivalent of the "array of" and that's why I 
> used it. If i should have done it in some other way please let me know.
>
> *> May you write some tests to demonstrate what you want to accomplish 
> > with the ugly map and share them here? *
> *
> *
> I am basically trying to destruct my deep map with a better way than a 
> 4-nested loop. 
>
> I will post a better code snippet in order to clean things even more.
>
> Thanks again
>
> On Monday, October 1, 2012 12:41:52 AM UTC+3, Grant Rettke wrote:
>>
>> On Sun, Sep 30, 2012 at 2:59 PM, arekanderu <areka...@gmail.com> wrote: 
>> > I am trying to port an ugly piece of code from Ruby to clojure. 
>>
>> May you share the original code? 
>>
>> > So far I 
>> > have only ported it to clojure by keeping the same way it was written 
>> in 
>> > Ruby and i am trying to re-write it the clojure way 
>> because...well....its 
>> > very ugly. 
>>
>> Why does my-map have vectors storing maps inside instead of a map with 
>> maps inside? 
>>
>> > I have a complex hash map which it's structure is always the same and 
>> the 
>> > keys always known and by using the values in those keys, i make some 
>> > function calls with those values as parameters. You can find a 
>> simplified 
>> > version of the map and the function which steps into the map below. 
>>
>> May you write some tests to demonstrate what you want to accomplish 
>> with the ugly map and share them here? 
>>
>> > I would really appreciate it if someone could propose an alternative 
>> way 
>> > of writing the above function or at least to point me where can I look 
>> for 
>> > some useful clojure functions that will help me do what I want but in a 
>> > cleaner way. 
>>
>> Once you provide tests then we have a better chance at helping. 
>>
>> -- 
>> ((λ (x) (x x)) (λ (x) (x x))) 
>> http://www.wisdomandwonder.com/ 
>> ACM, AMA, COG, IEEE 
>>
>

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