ana nedeni vektörler yavaş değildir - yani into
arama iştahla yığın taşmasına long-seq-vec
ve sonuçlar ürettiği özyinelemeli dizileri kullanır. Bunun bir sonucu olarak, sonsuz bir vektör oluşturmak mümkün değildir (genelde, eğer tembel veya döngüsel ise sonsuz bir veri yapısı yaratabilirsiniz). İlk örnekte çalışır çünkü cons
, tembel bir dizinin önüne geçerken tembel davrandığı için oldukça mutlu olduğundan, dizi sonsuz olabilir.
(defn long-seq-vec [n]
(for [x (iterate inc n)]
(vector x {:somekey (* x 2)})))
I:
(defn long-seq-vec [n]
(lazy-seq (cons
(vector n {:somekey (* n 2)})
(long-seq-vec (+ n 1)))))
(take 3 (long-seq-vec 3))
=> ([3 {:somekey 6}] [4 {:somekey 8}] [5 {:somekey 10}])
Veya alternatif olarak
, sen kendi içinde tembel
for
kullanabilirsiniz:
aslında ben gibi bir şey öneririm vektörlerin sonsuz dizisi istiyorum varsayarsak Bu, lazy-seq
/cons
klişeden kaçınıyor, yinelemeden kaçınıyor ve işlevin ne ifade ettiğini biraz daha net gösteriyor ... isterseniz biraz daha "bildirim". map
'u da benzer şekilde kullanabilirsiniz.