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