Hi Cecil, That's fine, but note that creating new Calendar objects has an overhead, using System.currentTimeMillis() is a static OS call which your now() probably uses, as well as object creation. It probably won't be millisecond sized, but you can measure your (now) using criterium.bench to be sure.
Also note that reduce in the last line is lazy by default, so ensure to wrap it in a doall or vec to make it greedy. Regards Fergal On Sat, Apr 12, 2014 at 2:49 PM, Cecil Westerhof <[email protected]>wrote: > 2014-04-12 15:06 GMT+02:00 Fergal Byrne <[email protected]>: > > For precise timing benchmarks, use criterium [1]. >> For simple, gross timing, use >> >> (map #(time (foo %)) numbers) >> > > That is not going to work, time prints the time instead of giving it back. > > > or to convert your code to something more functional (and including defns >> for now and foo): >> >> (defn now [] (. System currentTimeMillis)) >> > > I already defined it as: > (defn now [] > (new java.util.GregorianCalendar)) > > I use it for other things also. > > > >> (def numbers '(4 6 8 10)) >> >> (defn foo [n] (reverse (map #(* % %) (range (Math/pow n 5))))) >> >> (count (foo 10)) >> >> (defn timed-foo [times n] >> (let [start (now)] >> (foo n) >> (conj times (- (now) start)))) >> >> (reduce timed-foo [] numbers) => [0 0 4 14] >> > > I am going to look into this. > > > >> On Sat, Apr 12, 2014 at 1:13 PM, Cecil Westerhof >> <[email protected]>wrote: >> >>> At the moment I have the following: >>> (def numbers '(4 6 8 10)) >>> >>> (doseq [number numbers] >>> (foo number)) >>> >>> The call foo generates some output, but I also want to save the time it >>> took for the call to complete. At the moment I am thinking about >>> something like: >>> (def numbers '(4 6 8 10)) >>> >>> (def ^:dynamic needed-times ()) >>> (doseq [number numbers] >>> (let [start (now)] >>> (foo number) >>> (def ^:dynamic needed-times >>> (cons (- (.getTimeInMillis (now)) >>> (.getTimeInMillis start)) >>> needed-times)))) >>> >>> But it looks a 'little' cumbersome. Is there a better way to do this? >>> >>> Also if I need to use several points in time, do I keep nesting 'let', >>> or is there a better way? >>> >> > -- > Cecil Westerhof > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] > 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 unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- Fergal Byrne, Brenter IT Author, Real Machine Intelligence with Clortex and NuPIC https://leanpub.com/realsmartmachines <http://www.examsupport.ie>http://inbits.com - Better Living through Thoughtful Technology http://ie.linkedin.com/in/fergbyrne/ https://github.com/fergalbyrne e:[email protected] t:+353 83 4214179 Formerly of Adnet [email protected] http://www.adnet.ie -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] 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 unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
