嗨,我在研究来自记忆化的这个例子:
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