Привет. Я рассматриваю этот пример из Memoization:
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)
Мне просто интересно, почему это работает, потому что для меня, если вы вызываете memoized_fib(n-2)
, тогда вы "создаете" новый список и делаете что-то с ним, и после вашего возвращения из него список, содержащий частичный результат, исчезнет? Так что memorized_fib(n-1)
вообще не выиграет от этого?