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

Reply via email to