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)))
Meikel
Am Dienstag, 11. Juni 2013 11:04:14 UTC+2 schrieb raym:
>
> The 'reduce' solution is very elegant, but you can simplify it further:
>
> (defn filter-file [filename]
> (with-open [rdr (io/reader filename)]
> (reduce (fn [words line]
> (into words (filter #(<= 4 (count %) 9) (str/split line
> #"\s+"))))
> #{}
> (line-seq rdr))))
>
> Ray.
>
> On 10 June 2013 18:20, Thomas Heller <[email protected] <javascript:>>
> wrote:
> > Hey,
> >
> > I pasted the code into gist ( https://gist.github.com/thheller/5734642) and
> > copy&pasted that into the post.
> >
> > Cheers,
> > /thomas
> >
> >
> > On Mon, Jun 10, 2013 at 6:01 PM, Alan Thompson
> > <[email protected]<javascript:>>
>
> > wrote:
> >>
> >> Hey Thomas - How'd you get the nice syntax highlighting in your post?
> >> Alan
> >>
> >>
> >> On Sat, Jun 8, 2013 at 7:16 PM, Steven D. Arnold
> >> <[email protected] <javascript:>> wrote:
> >>>
> >>> Thanks for the responses! As suggested, wrapping in 'doall' does
> work.
> >>>
> >>>
> >>> On Jun 8, 2013, at 3:28 AM, Thomas Heller
> >>> <[email protected]<javascript:>>
> wrote:
> >>>
> >>> (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))))
> >>>
> >>>
> >>> That code is really graceful and clean. I like it a lot. But for
> some
> >>> reason I've never loved 'reduce' before, which probably means I've
> never
> >>> used it where it is called for. Reduce just seems so generic... it's
> what
> >>> you say when you haven't got anything better to say, something like
> "all
> >>> right, do this."
> >>>
> >>> But, having said that, I'd pick your implementation over mine, because
> I
> >>> think it's conceptually cleaner (as recursive algorithms often are).
> Nice.
> >>> Thanks!
> >>>
> >>> steven
> >>>
> >>> --
> >>> --
> >>> You received this message because you are subscribed to the Google
> >>> Groups "Clojure" group.
> >>> To post to this group, send email to [email protected]<javascript:>
> >>> Note that posts from new members are moderated - please be patient
> with
> >>> your first post.
> >>> To unsubscribe from this group, send email to
> >>> [email protected] <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 [email protected] <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 [email protected]<javascript:>
> >> Note that posts from new members are moderated - please be patient with
> >> your first post.
> >> To unsubscribe from this group, send email to
> >> [email protected] <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 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
> >> [email protected] <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 [email protected]<javascript:>
> > Note that posts from new members are moderated - please be patient with
> your
> > first post.
> > To unsubscribe from this group, send email to
> > [email protected] <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 [email protected] <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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.