You're not capturing the output of the reduce anywhere; doseq is for side-effects only.
If you wrapped the doseq in a "(def dictionary ...)" it would work, but this is not recommended. Instead, you should either use nested reductions, or produce a simple list of tokens first (simpler): (defn process-file [file-name] (with-open [rdr (BufferedReader. (FileReader. file-name))] (reduce #(assoc %1 %2 (inc (get %1 %2 1))) {} (mapcat #(re-seq #"[a-z]+" (.toLowerCase %)) (line-seq rdr))))) (def dictionary (process-file "src/SpellChecker.clj")) (Untested). Or, using clojure-contrib functions: (defn process-file [file-name] (->> (clojure.contrib.duck-streams/read-lines file-name) (mapcat #(re-seq #"[a-z]+" (.toLowerCase %))) clojure.contrib.seq/frequencies)) (also untested). Cheers, Jason On Jan 6, 10:49 am, new2clojure <miguel.arre...@gmail.com> wrote: > Hi, > > I am trying to store into a map the frequency of each [a-z]+ word in a > file. When I run this code in the repl the resulting dictionary is > empty. How should I adapt my code to get this functionality right?. > > Thank you in advance > > (import (java.io BufferedReader FileReader)) > > (def dictionary {}) > > (defn process-file [file-name] > (with-open > [rdr (BufferedReader. (FileReader. file-name))] > (doseq > [line (line-seq rdr)] > (reduce #(assoc %1 %2 (inc (get %1 %2 1))) dictionary (re-seq > #"[a-z]+" (.toLowerCase line)))))) > > (process-file "src/SpellChecker.clj") -- 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 Note that posts from new members are moderated - please be patient with your first post. 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