Thanks Laurent.. That really helps and also thanks for the tip of how to try
to do it in general.
Sunil.

On Fri, Dec 3, 2010 at 3:48 PM, Laurent PETIT <laurent.pe...@gmail.com>wrote:

> Hello,
>
> one way:
>
> (apply
>   merge-with
>   conj
>   {}
>   (for [nd d nd-pair nd face nd-pair]
>     {face nd}))
>
> The idea is (as is generally the case for me when trying to move from
> imperative code to functional), is to try not to do too many things in a
> single step.
> So here, first I extract from the "for" "pieces of information", individual
> pairs of face => containing-node into an intermediate sequence.
> Then I consume this sequence with merge-with.
> I could also consume this sequence with reduce, of course:
> (reduce (fn [m fnd] (merge-with conj m fnd) (for ...))
>
>
> HTH,
>
> --
> Laurent
>
>
> 2010/12/3 Sunil S Nandihalli <sunil.nandiha...@gmail.com>
>
>> Hello everybody,
>>
>>  I would like to know as to how I would write the following code in a more 
>> idiomatic way.
>>
>>
>>
>>
>>
>>
>>
>> (let [mp (atom {})
>>
>>
>>
>>
>>       d [#{#{1 2}
>>
>>
>>
>>
>>            #{3 4}} ;node1
>>
>>
>>
>>
>>          #{#{5 6}
>>
>>
>>
>>
>>            #{7 8}} ;node2]]
>>
>>
>>
>>
>>   (dorun (for [nd d nd-pair nd face nd-pair]
>>
>>
>>
>>
>>            (swap! mp update-in [face] #(conj % nd))))
>>
>>
>>
>>
>>   @mp)
>>
>>
>>
>>
>>
>>
>> ; if you consider that points 1 2 3 4 form the node node1 and 5 6 7 8 form 
>> node2
>>
>>
>>
>>
>> ;I would like a map in the opposite direction ..
>>
>>
>>
>>
>> ;i.e. I should be able to find out all the nodes of which 1 is part of and
>>
>>
>>
>>
>> ;that is what the above code is doing.. but would like to know as to what
>>
>>
>>
>>
>> ;would be a more idiomatic way of doing this.
>>
>>
>>
>>
>>
>>
>>
>> https://gist.github.com/726773
>>
>>
>>
>>
>> I don't like the fact that I am using atom and swap .. can anybody suggest a 
>> better way to do it?
>>
>>
>>
>> Thanks,
>> Sunil.
>>
>>  --
>> 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<clojure%2bunsubscr...@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<clojure%2bunsubscr...@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

Reply via email to