Instead of #(- (val %)), one could also use the compose function :
(comp - val)

My 0,02 EURO,

--
Laurent

On Dec 25, 4:58 pm, Mibu <mibu.cloj...@gmail.com> wrote:
> My version:
>
> (defn top-words [input-filename result-filename]
>   (spit result-filename
>         (apply str
>                (map #(format "%s : %d\n" (first %) (second %))
>                     (sort-by #(-(val %))
>                              (reduce #(conj %1 { %2 (inc (%1 %2 0)) }) {}
>                                      (map #(.toLowerCase %)
>                                           (re-seq #"\w+"
>                                                   (slurp 
> input-filename)))))))))
>
> Mibu
>
> On Dec 25, 2:16 pm, Piotr 'Qertoip' Włodarek <qert...@gmail.com>
> wrote:
>
> > Given the input text file, the program should write to disk a ranking
> > of words sorted by frequency, like:
>
> >                  the : 52483
> >                  and : 32558
> >                   of : 23477
> >                    a : 22486
> >                   to : 21993
>
> > My first implementation:
>
> > (defn topwords [in-filepath, out-filepath]
> >   (def words (.split (.toLowerCase (slurp in-filepath)) "\\s+"))
>
> >   (spit out-filepath
> >         (apply  str
> >                 (concat
> >                   (map (fn [pair] (format "%20s : %5d \r\n" (key pair)
> > (val pair)))
> >                        (sort-by #( -(val %) )
> >                                 (reduce
> >                                   (fn [counted-words word]
> >                                       ( assoc counted-words
> >                                               word
> >                                               (inc (get counted-words
> > word 0)) ))
> >                                   {}
> >                                   words)))
> >                   ["\r\n"]))))
>
> > Somehow I feel it's far from optimal. Could you please advise and
> > improve? What is the best, idiomatic implementation of this simple
> > problem?
>
> > regards,
> > Piotrek
--~--~---------~--~----~------------~-------~--~----~
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