2013-09-10 39 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。它從頭到尾走過每一個元素。

相關問題