ı bir LazySeq"Say", Clojure'da tembel bir sıra gerçekleştirir mi?
var diyelim (def s (10 (iterate almak + 0)))
(count s)
dizisini gerçekleştirmek mu?
ı bir LazySeq"Say", Clojure'da tembel bir sıra gerçekleştirir mi?
var diyelim (def s (10 (iterate almak + 0)))
(count s)
dizisini gerçekleştirmek mu?
Tembel diziler hakkında soru soruyorsanız, Evet.
user> (def s (map #(do (println "doing work") %) (range 4)))
#'user/s
user> (count s)
doing work
doing work
doing work
doing work
4
veri yapılarının bazı hep sayarak onları anlar tembel dizileri saklı sayımını yok gerçi, size sürekli sürede cevap vermek ve olabilir.
Tembel sıranın tanımına bağlıdır. Elemanlarını fark etmeden uzunluklarını bilenleri uygulamak mümkündür. Örnek için bkz. this question, ancak vakaların% 99'unda sadece LazySeqs olduklarından, Michiel'in cevabı bunu kapsamalıdır. böylece s
o onun içeriği farkında olmadan uzunluğu olduğunu bilecek kadar 'zeki' değil, (count s)
çağrıldıktan sonra
(realized? s)
getiri true
: senin örneğin durumda
o kadar, test etmek kolaydır.
Oh 'Bilmiyorum' hakkında bilmiyordum. Teşekkürler! – al3x
Bir LazySeq evet için sayma yöntemini here görebilirsiniz. Her elemanı baştan kuyruğa doğru yürüyor.
ilk gerek yok –
oops, teşekkürler. sabit. –