嗨,我從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