clojure - Clojure 中的头部保留

标签 clojure

阅读“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 ,耗时不知何故增长。我想,我在这里错过了一些东西,但是什么?

最佳答案

Count是 O(1)。这就是为什么您的测量不依赖于它。

关于clojure - Clojure 中的头部保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13285450/

相关文章:

java - NoClassDefFoundError 在协议(protocol)上需要其命名空间时

用于 Clojure 的 Python StringIO

Clojure:使用 eval 发生内存泄漏

clojure - [ ] 在 Clojure 的函数中如何工作?

clojure - 如何让 Clojure go 循环永远运行

clojure - Clojure静态输入

java - 线程 "main"java.lang.ExceptionInInitializerError 中的异常 (Clojure)

Clojure let 允许多个同名绑定(bind)

map - 存储解构映射供以后使用

java - Clojure Java Interop - 对字段的引用...无法解析