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 <in...@zilence.net <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 
> > <thomps...@gmail.com<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 
> >> <thoth.a...@gmail.com <javascript:>> wrote: 
> >>> 
> >>> Thanks for the responses!  As suggested, wrapping in 'doall' does 
> work. 
> >>> 
> >>> 
> >>> On Jun 8, 2013, at 3:28 AM, Thomas Heller 
> >>> <th.h...@gmail.com<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 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 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 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 <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 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.


Reply via email to