我在使用lein repl
和LightTable Instarepl(LTIR)时发现完成时间上有奇怪的差异。例如下面这段代码:
(defn lazy-primes
([] (cons 2 (lazy-seq (lazy-primes 3 [ 2 ]))))
([current calculated-primes]
(loop [ [first-prime & rest-primes] calculated-primes]
(if (> (* first-prime first-prime) current)
(cons current (lazy-seq (lazy-primes
(inc current)
(conj calculated-primes current))))
(if (= 0 (mod current first-prime))
(lazy-seq (lazy-primes (inc current) calculated-primes))
(recur rest-primes))))))
(time (last (take 10001 (lazy-primes))))
在我的LTIR中,它花费了:
"经过时间:4535.442412毫秒"
但在lein repl
中:
"经过时间:431.378074毫秒"
相差十倍!
那么,问题来了-为什么会有这么大的差异?
LTIR和lein repl
的Clojure版本均为1.7.0
这段代码不是我写的,而是来自codereview