2

fib は cumfib の各要素に対して最初から評価されますか?

fib = (1:1: zipWith (+) fib (tail fib))
cumfib = [ sum $ take i fib | i<-[1..]]

または、最初の i 要素がキャッシュされ、cumsum の要素 (i+1) に再利用されますか?

fib は同じラムダ式で使用されているため、一度だけ計算されると多かれ少なかれ推測しています。

さらに、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 ...

素数が 1 回評価されるのか、複数回評価されるのか、それとも私が質問を作成した方法から判断できないのかを教えてください。

4

2 に答える 2

0

このように追加したいのですが、 の最初の要素のcumfib合計を不必要に再計算します。より効率的に次のように定義できます。ifib

cumfib = tail $ scanl (+) 0 fib
于 2014-03-13T18:39:07.117 に答える