So, it seems the way I was removing nils using filter was already the
best way.  still nice to learn about the keep fn.  thx!

On Nov 17, 8:38 pm, Ken Wesson <kwess...@gmail.com> wrote:
> On Wed, Nov 17, 2010 at 7:55 PM, Robert McIntyre <r...@mit.edu> wrote:
> > So, just to be clear,
>
> > user> (def nil-seq (doall (interleave (repeat 1e5 nil) (repeat 1e5
> > "whatever"))) )
> > #'user/nil-seq
>
> > user> (time (doall (keep identity nil-seq)))
> > "Elapsed time: 122.485848 msecs"
>
> > user> (time (doall (remove nil?  nil-seq)))
> > "Elapsed time: 149.71484 msecs"
>
> I have to run these all a few times before the times quit shrinking
> (JITting being done). Then:
>
> user=> (time (do (doall (keep identity nil-seq)) nil))
> "Elapsed time: 70.24324 msecs"
> nil
> user=> (time (do (doall (remove nil? nil-seq)) nil))
> "Elapsed time: 40.47016 msecs"
> nil
> user=> (time (do (doall (filter identity nil-seq)) nil))
> "Elapsed time: 36.70256 msecs"
> nil
>
> It seems on my system keep identity is actually almost twice as SLOW
> as remove nil? and filter identity is slightly faster; filter identity
> is almost exactly twice as fast as keep identity. Filter identity
> does, of course, discard falses as well as nils, but when that's
> acceptable it's worth knowing it's fastest.
>
> I wonder if the difference is that I'm using the -server vm?
>
> It's especially interesting, in light of the likelihood that identity
> is probably compiling away to nothing when the JIT is done inlining
> everything, that both the slowest and the fastest use identity. It
> suggests that keep is inherently somewhat slow, in particular.

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