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