是否從cumfib的每個元素的開始處開始評估fib?評估擴展列表的頻率
fib = (1:1: zipWith (+) fib (tail fib))
cumfib = [ sum $ take i fib | i<-[1..]]
或者是第一個i元素緩存並重新用於cumsum的元素(i + 1)?
我或多或少地猜測fib用在相同的lambda表達式中,因此僅計算一次。
此外,fib函數的實現是否對第i個斐波納契數的評估頻率有多少?我的實際問題涉及素數而不是斐波那契數,我希望「緩存」以輕鬆評估某些數n的素數因子。但是,我只使用
takeWhile (\x-> x*x<n) primes
的素數。自從我第一次和後評估小樣本的因素更大的N,的素數的增加這個子集,因此我不知道,素數是如何評估的頻次,如果我做的:
primes = ... some way of calculating primes ...
helpHandlePrimes ... = ... using primes ...
handlePrimes = ... using primes and helpHandlePrimes ...
請讓我知道素數是否評估一次,多次,或者這是否不能從我如何制定問題來確定。
這取決於'fib'的寫入位置。它是頂級價值嗎?或者只是一個函數中的綁定變量? – Ingo
在頂層,但我可能會這樣做:someFuntion ... = ....其中fibsOfInterest = takeWhile(<= 1000)fibs,它仍然可以工作嗎? – Herbert
是的,fibs會根據您的需要進行擴展,而無需重新評估。 – Ingo