Haskell için oldukça yeni ve Fibonacci dizilerinin tembel ifadesinin nasıl çalıştığını kafamın etrafına sarmaya çalışıyorum.Haskell Fibonacci Açıklama
Bunun daha önce sorulmuş olduğunu biliyorum, ancak cevapların hiçbiri sonucu görselleştirmekle uğraştığım bir sorunu gidermedim.
zipWith
anlamıyla bir liste ilk elemanı ancak birlikte iki listeyi
tail
kapmak tüm fermuarlar:kod
zipWith
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Aşağıdakileri anladım kullanarak standart biridir
- Haskell, 'to-be' hesaplanmış veriyi
thunks
olarak göndermektedir. Benim anlayış
, ilk [0,1,<thunk>]
ve [1,<thunk>]
[1,<thunk>]
vermek zipWith (+)
kullanarak ekler.
Neden: Yani şimdi
fibs = 0 : 1 : 1 : zipWith (+) fibs (tail fibs)
Ben google'dan ettik referanslar Bir çok sonra Sorum şudur
fibs = 0 : 1 : 1 : zipWith (+) [1,1,<thunk>] ([1,<thunk>]).
yukarıdaki çizgiyi "görselleştirmek" yolunu seçerler var sadece
[1,1,<thunk>]
yerinekarşılık gelen yukarıda doğrultusunda
fibs
bileşeni? fibs
tüm listeyi içermemeli ve <thunk>
? zipWith
zaten öğelerin ilk çifti işledi çünkü
iyi bir yol biz kademeli erişmeyi olarak örneğin 3 almak 'in (varlık haline geldiğini (http://stackoverflow.com/a/20978114/849891) [geçici değerlere isim] etmektir fibs'). Böylelikle, aynı veriden iki kere (aynı adla) veya iki eşit veri parçası (her biri kendi adına sahip) arasında bir karışıklık yoktur. –