嗨,我从Memoization看下面这个例子:Haskell:为什么这个工作 - 一个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)
会不会从中受益呢?
如果您将定义更改为'memoized_fib n = map fib [0 ..] !!,那么记忆就会打破您考虑的方式! N'。我不知道害羞,但也许别人可以阐明它。 – hugomg
http://blog.ezyang.com/2011/04/the-haskell-heap/是关于haskell堆的一个很棒的系列,它也可以解释这个(不确定),但即使它不是很好的阅读! – bennofs