为什么要使用空计数?

kit*_*nky 1 clojure

要确定是否Clojure的名单有任何物品,那岂不是更有效的(空间+内存明智)使用(zero? (count coll))(empty? coll)它创建了一个序列?

一下,因为文档显示了列表作为示例之一。

lee*_*ski 6

count 本身并不总是恒定时间函数:

user> (time (count (take 1000000 (iterate inc 0))))
;;=> "Elapsed time: 185.544391 msecs"
Run Code Online (Sandbox Code Playgroud)

而且,例如,(count (range))甚至还无法完成。

虽然empty?使用seq创建序列的方法,但是仍然不会复制其内容,所以它是一个恒定时间函数(并且由于clojure的数据结构是通过内容结构共享来设计的,因此内存损失并不是很大):

user> (time (empty? (take 1000000 (iterate inc 0))))
;;=> "Elapsed time: 0.254139 msecs"
Run Code Online (Sandbox Code Playgroud)

您也可以考虑使用(= () (take 1 coll)),但我认为它不会比普通方法更好empty?