Whoa! Thanks Juan. I will start to understand/analyze this...

 

________________________________

From: clojure@googlegroups.com [mailto:clojure@googlegroups.com] On
Behalf Of JuanManuel Gimeno Illa
Sent: Tuesday, May 03, 2011 11:40 AM
To: clojure@googlegroups.com
Subject: Re: RE: Multi-level bucketing problem

 

I'm sure this can be simplyfied:

 

(defn mlg [attrs data]

    (if (empty? attrs)

        [ (reduce + (map :mv data)) {:children data}]

            (let [parts (group-by (first attrs) data)

                  subtrees (map (fn [[value data]] 

                                [value (mlg (rest attrs) (map #(dissoc %
(first attrs)) data))])

                              parts)]

                (reduce (fn [[sum tree] [value [sumsubtree subtree]]]

                            [(+ sum sumsubtree)

                             (update-in tree [:children] conj (assoc
subtree 

                                                                :path
[(first attrs) value]

                                                                :mv
sumsubtree))]

                        )

                        [ 0.0  { :children [] }]

                        subtrees))))

 

Returns a pair with the sum for all items and a tree. 

 

Each tree is represented as a dictionary, and inner nodes of the tree
have three keys:

- :mv the sum of :mv's of its children

- :path a pair of attr-value that represents all the leaves in the
subtree

- :children the subtrees of this level

 

Leaves are represented as dictionaries with only the keys :sec_id and
:mv.

 

I've forked your gist, so you can grab the code directly from github
https://gist.github.com/952861

 

Best regards,

 

Juan Manuel

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

Reply via email to