That has tricked me before. The lazy one is fastest because all you
are timing is the creation of the lazy seq, not its realization. Wrap
the lazy seq in a doall inside the time macro.

On Wed, Apr 13, 2011 at 12:59 PM, babui <jmgim...@gmail.com> wrote:
> I was asking because my timings show that the lazy version is the
> fastest one.
>
> My (very simple & stupid) test is:
>
> (defn flatten-maps
>    "The original one"
>    ....)
>
> (defn flatten-maps-lazy
>    "The lazy one"
>    ....)
>
> (defn flatten-maps-eager
>    "The eager one"
>    ....)
>
> (defn flatten-maps-recur
>     "Using recur"
>     ....)
>
> And data is:
>
> (def data [{:a 1 :b 1 :c [{:a 2 :b 2 :c [{:a 3 :b 3 :c []}]} {:a 4 :b
> 4 :c []}]} {:a 5 :b 5 :c [{:a 6 :b 6 :c [{:a 7 :b 7 :c []}]} {:a 8 :b
> 8 :c []}]}])
>
> That is, the original data but with different numbers to check if the
> result is ok:
>
> (time (flatten-maps data))
> user=> "Elapsed time: 0.14 msecs"
> ({:a 5, :b 5} {:a 1, :b 1} {:a 4, :b 4} {:a 2, :b 2} {:a 3, :b 3} {:a
> 8, :b 8} {:a 6, :b 6} {:a 7, :b 7})
>
> (time (flatten-maps-lazy data))
> user=> "Elapsed time: 0.034 msecs"
> ({:a 1, :b 1} {:a 2, :b 2} {:a 3, :b 3} {:a 4, :b 4} {:a 5, :b 5} {:a
> 6, :b 6} {:a 7, :b 7} {:a 8, :b 8})
>
> (time (flatten-maps-eager data))
> user=> "Elapsed time: 0.129 msecs"
> [{:a 1, :b 1} {:a 2, :b 2} {:a 3, :b 3} {:a 4, :b 4} {:a 5, :b 5} {:a
> 6, :b 6} {:a 7, :b 7} {:a 8, :b 8}]
>
> (time (flatten-maps-recur data))
> user=> "Elapsed time: 0.129 msecs"
> ({:a 8, :b 8} {:a 7, :b 7} {:a 6, :b 6} {:a 5, :b 5} {:a 4, :b 4} {:a
> 3, :b 3} {:a 2, :b 2} {:a 1, :b 1})
>
> So my tests show that the fastest is the lazy one.
>
> Regards,
>
> Juan Manuel
>
> --
> 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 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