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