(soruyu buraya yazıyorum çünkü kodlama probleminden ziyade kavramsal mekaniği ile ilgili)
Eşitliğinde bir dizi fibonacci numarası kullanan küçük bir program üzerinde çalışıyordum, ancak belirli bir sayıyı aşarsam acı verici bir şekilde yavaşladığını fark ettim, Haskell'de bir tekniğe rastladım Memoization
, kodun şu şekilde çalıştığını gösterdiler:
-- Traditional implementation of fibonacci, hangs after about 30
slow_fib :: Int -> Integer
slow_fib 0 = 0
slow_fib 1 = 1
slow_fib n = slow_fib (n-2) + slow_fib (n-1)
-- Memorized variant is near instant even after 10000
memoized_fib :: Int -> Integer
memoized_fib = (map fib [0 ..] !!)
where fib 0 = 0
fib 1 = 1
fib n = memoized_fib (n-2) + memoized_fib (n-1)
Yani size sorum şu: bu nasıl ya da daha doğrusu çalışıyor?
Bir şekilde hesaplama yakalanmadan önce listenin çoğunu çalıştırmayı başarıyor mu? Ancak haskell tembelse, yakalanması gereken herhangi bir hesaplama yoktur ... Peki nasıl çalışır?
the calculation catches up
? BTW,