2013-09-10 2 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はいの場合、カウント方法hereが表示されます。それは、すべての要素を頭から尾まで歩きます。

関連する問題