Let's play !

First:
Slight variation on Chouser's second version (presuming it should be faster
for the token comparison, which is evil - presuming performance instead of
testing it ! ) :


(let [x (Object.)]
   (defn filter-collecting [p c & l]
      (remove #(identical? % x)
        (apply map #(if (apply p %&) (apply c %&) x) l))))

Second:
Very short, certainly not (?) as efficient:
(defn filter-collecting [p c & l] (apply mapcat #(when (apply p %&) [(apply
c %&)]) l))


2009/8/14 Chouser <chou...@gmail.com>

>
> On Fri, Aug 14, 2009 at 3:43 PM, Fogus<mefo...@gmail.com> wrote:
> >
> > Wanna play golf?
>
> Yes I do!
>
> (defn filter-collecting [p c & l]
>  (remove nil? (apply map #(when % (apply c %&)) (apply map p l) l)))
>
> But that gives incorrect results if c ever returns nil, so
> I guess it should be:
>
> (defn filter-collecting [p c & l]
>  (let [x `x#]
>    (remove #(= % x)
>                (apply map #(if % (apply c %&) x)
>                                   (apply map p l)
>                                           l))))
>
> But that's getting pretty ugly, so maybe this is better:
>
> (defn filter-collecting [p c & l]
>  (map #(apply c %)
>       (filter #(apply p %)
>                   (apply map vector l))))
>
> Nothing terribly inventive there.  I'll have to get my
> satisfaction from being first.  I'm sure the best are yet to
> come...
>
> --Chouser
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to