fib 是否从一开始就对 cumfib 的每个元素进行评估?
fib = (1:1: zipWith (+) fib (tail fib))
cumfib = [ sum $ take i fib | i<-[1..]]
还是前 i 个元素被缓存并重用于 cumsum 的元素 (i+1)?
我或多或少猜测 fib 用于同一个 lambda 表达式,因此 is 只计算一次。
此外,fib 的实施是否与评估第 i 个斐波那契数的频率有关?我的实际问题涉及素数而不是斐波那契数,我希望将其“缓存”以轻松评估某个数 n 的素数。但是,我只使用
takeWhile (\x-> x*x<n) primes
的素数。由于我先评估小 n 的因子,然后再评估大 n 的因子,因此这个素数子集会增加,因此我想知道,如果我这样做,素数的评估频率是多少:
primes = ... some way of calculating primes ...
helpHandlePrimes ... = ... using primes ...
handlePrimes = ... using primes and helpHandlePrimes ...
请让我知道 primes 是否评估一次,多次,或者这是否无法从我提出问题的方式来确定。