(defn filter-file [filename](with-open [rdr (io/reader filename)](reduce (fn [words line](->> (str/split line #"\s+")(filter #(and (<= (count %) 9)(>= (count %) 4)))(set)(set/union words)))#{}(line-seq rdr))))
(defn filter-file [filename]
(with-open [rdr (io/reader filename)]
(reduce (fn [words line]
(->> (str/split line #"\s+")
(filter #(and (<= (count %) 9)
(>= (count %) 4)))
(set)
(set/union words)))
#{}
(line-seq rdr))))
--
--
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 a topic in the Google Groups "Clojure" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/5o7iIrQQlR4/unsubscribe?hl=en.
To unsubscribe from this group and all its topics, send an email to clojure+u...@googlegroups.com.
On Jun 11, 2013 8:25 AM, "Meikel Brandmeyer (kotarak)" <m...@kotka.de> wrote:
> Or another one:
>
> (defn filter-lines
> [rdr]
> (->> (line-seq rdr)
> (mapcat #(str/split % #"\s+"))
> (filter #(<= 4 (count %) 9))
> (into #{})))
>
> (defn filter-file
> [filename]
> (with-open [rdr (io/reader filename)]
> (filter-lines rdr)))
I like this split a lot, though I'd prefer to pass the line-seq to filter-lines. Then you have an extremely simple impure fn and all your logic in an easy-to-test, easy-to-reuse pure function.