【发布时间】:2012-11-08 08:46:22
【问题描述】:
阅读“Clojure 编程”(第 98 页)中关于头部保留的段落,我无法弄清楚 split-with 示例中发生了什么。我试过用 repl 做实验,但它让我更加困惑。
(time (let [r (range 1e7)
a (take-while #(< % 12) r)
b (drop-while #(< % 12) r)]
[(count a) (count b)]))
"Elapsed time: 1910.401711 msecs"
[12 9999988]
(time (let [r (range 1e7)
a (take-while #(< % 12) r)
b (drop-while #(< % 12) r)]
[(count b) (count a)]))
"Elapsed time: 3580.473787 msecs"
[9999988 12]
(time (let [r (range 1e7)
a (take-while #(< % 12) r)
b (drop-while #(< % 12) r)]
[(count b)]))
"Elapsed time: 3516.70982 msecs"
[9999988]
从上一个示例中可以看出,如果我不计算 a,则耗时会以某种方式增加。我想,我在这里错过了一些东西,但是什么?
【问题讨论】:
-
这个问题是stackoverflow.com/questions/15994316/clojure-head-retention的重复问题,答案很好。
标签: clojure