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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> wrote: > > > On Thursday 11 December 2008 06:33, Dave Griffith wrote: > > > > On Dec 11, 9:21 am, bOR_ <[EMAIL PROTECTED]> 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---