Let’s say that you want to profile a piece of code in clojurescript. There is a cool macro for that in clojurescript: time.

time evaluates an expression and prints the time it took and returns the value of the expression.

The interesting question is:

Where does time print 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)))