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

Reply via email to