I do something very similar to this where I parse large CSVs and keep/discard rows of the CSV based on the values of columns. Like you I had a hard time "getting" how to use reduce beyond trivial implementations.
I spent some time messing with reduce and learning how to construct more advanced reductions. The result of that learning became this blog post: http://jarrodswart.com/clojure-like-im-five-reduce-functions/, I hope it helps you too. On Tuesday, March 4, 2014 5:14:49 PM UTC-5, Jason Felice wrote: > > Your welcome! > > I just realized that, in this case, filter and map are good enough, but > the general answer for threading state through the processing of a sequence > is to use `reduce`. Coming from another language, it takes a while to > realize how often the answer is to use reduce. > > -Jason > > > On Tue, Mar 4, 2014 at 4:07 PM, Dean Laskin <wdla...@gmail.com<javascript:> > > wrote: > >> Awesome, thanks Jason! It looks much cleaner. >> >> Dean >> >> >> On Tuesday, March 4, 2014 4:47:12 PM UTC-5, Jason Felice wrote: >> >>> Something like >>> >>> (with-open [rdr (clojure.java.io/reader "/dev/errors-sunday.csv")] >>> (->> (line-seq rdr) >>> (filter #(re-matches #"...")) >>> (map #(nth (string/split % #",") 1)))) >>> >>> Will do what you want. It's laziness to the rescue. >>> >>> >>> On Tue, Mar 4, 2014 at 3:21 PM, Dean Laskin <wdla...@gmail.com> wrote: >>> >>>> I'm comparing two large files based on specific fields in the files. Is >>>> there a functional way of accumulating the results without atoms? (And >>>> since I'm a newbie, any other advice is appreciated!) >>>> >>>> (let [sun (atom []) fri (atom [])] >>>> (with-open [rdr (clojure.java.io/reader "/dev/errors-sunday.csv")] >>>> (doseq [line (line-seq rdr)] >>>> (when (re-matches #"^[^,]+,[^,]+,FAIL,.*$" line) >>>> (swap! sun conj (nth (string/split line #",") 1))))) >>>> (with-open [rdr (clojure.java.io/reader "/dev/errors-friday.csv")] >>>> (doseq [line (line-seq rdr)] >>>> (when (re-matches #"^[^,]+,[^,]+,FAIL,.*$" line) >>>> (swap! fri conj (nth (string/split line #",") 1))))) >>>> (println (nth (data/diff (set @fri) (set @sun)) 1)) >>>> ) >>>> >>>> Thanks, >>>> Dean >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to clo...@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+u...@googlegroups.com >>>> >>>> For more options, visit this group at >>>> http://groups.google.com/group/clojure?hl=en >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to clojure+u...@googlegroups.com. >>>> >>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com<javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> > > -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.