2013-09-10 25 views

回答

5

如果您询问懒惰序列,是的。

user> (def s (map #(do (println "doing work") %) (range 4))) 
#'user/s 
user> (count s) 
doing work 
doing work 
doing work      
doing work 
4 

一些数据结构可以给你一定的时间的答案,但懒惰序列不具有存储计数和总是计数实现他们

+0

第一次做没有​​必要 –

+0

哎呀,谢谢。固定。 –

1

取决于惰性序列的定义。有可能实现那些知道它们的长度而不知道它们的元素。举例来说,请参见this question,但在99%的案例中,它们只是LazySeqs,因此Michiel的答案应该涵盖这一点。

在您的例子情况下,它很容易测试,如:

(realized? s) 

回报true调用(count s)后,所以s不是“聪明”,足以知道它的长度却没有意识到它的内容。

+0

哦,我不知道'实现吗?'。谢谢! – al3x

3

对于LazySeq yes,你可以看到它的计数方法here。它从头到尾走过每一个元素。

相关问题