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