Slightly shorter version: (defn frequencies "Returns a map from distinct items in coll to the number of times they appear." [coll] (reduce (fn [counts x] (merge-with + counts {x 1})) {} coll))
On Dec 11, 9:14 am, Stuart Sierra <the.stuart.sie...@gmail.com> wrote: > I've added a slightly modified version to clojure.contrib.seq-utils: > > (defn frequencies > "Returns a map from distinct items in coll to the number of times > they appear." > [coll] > (reduce (fn [counts x] > (assoc counts x (inc (get counts x 0)))) > {} coll)) > > -Stuart Sierra > > On Dec 11, 10:07 am, Dave Griffith <dave.l.griff...@gmail.com> wrote: > > > Yup, five bugs by my count. Not bad for a one-liner. More coffee > > necessary. > > > Same algorithm, but tested. > > > (defn frequencies [coll] > > (reduce (fn [map val] (assoc map val (if (contains? map val) (+ 1 > > (get map val)) 1))) {} coll) > > ) > > > On Dec 11, 9:52 am, Randall R Schulz <rsch...@sonic.net> wrote: > > > > On Thursday 11 December 2008 06:33, Dave Griffith wrote: > > > > > On Dec 11, 9:21 am, bOR_ <boris.sch...@gmail.com> wrote: > > > > > Hi all, > > > > > > I thought I remembered there was a method in the api somewhere that > > > > > would count the frequency of each unique item in a collection, but > > > > > I can't find it anymore. What would be a brief way to write that in > > > > > clojure? > > > > > > (In ruby: array.inject(Hash.new(0)) {|hash,key| hash[key] += 1 ; > > > > > hash}) > > > > > (defn frequencies [coll] > > > > (reduce (fn [map val] (assoc map val (if (contains map val) (get map > > > > val) 1)) #{}) > > > > ) > > > > Shooting from the hip, eh? There is no "contains", it's "contains?". > > > There's a missing close parenthesis. I don't see where this is doing any > > > counting. How does it compute occurrence frequencies? > > > > Randall Schulz --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---