Let’s say that you want to profile a piece of code in clojurescript. There is a cool macro for that in clojurescript: time.
timeevaluates an expression and prints the time it took and returns the value of the expression.
The interesting question is:
timeprint the time it took?
Usually, it prints in the browser console. This is because, you have probably called
(enable-console-print!) somewhere in your code.
But as a KLIPSE user, you want the time to be displayed in the evaluation rectangle instead of inside the console.
It’s simple to achieve that using with-out-str.
Let’s see it in action by comparing the running time of two naive implementations for prime number generation.
Here is a very naive implementation:
(defn is-prime? [n] (empty? (filter #(= 0 (mod n %)) (range 2 n)))) (defn nth-prime [n] (last (take n (filter #(is-prime? %) (iterate inc 2))))) (with-out-str (time (nth-prime 50)))
And now a less naive implementation:
(defn is-prime-opt? [n] (or (= 2 n) (not-any? #(= 0 (mod n %)) (range 3 (inc (Math/sqrt n)) 2)))) (defn nth-prime-opt [n] (last (take n (filter #(is-prime-opt? %) (cons 2 (iterate (partial + 2) 3)))))) (with-out-str (time (nth-prime-opt 50)))