プロジェクト Euler を使用して Haskell を独学していますが、自分のコードが haskell によってどのように実行されているかについて推論するのに苦労しています。2 番目の問題では、400 万までのすべての偶数フィボナッチ数の合計を計算する必要があります。私のスクリプトは次のようになります。
fibs :: [Integer]
fibs = 1 : 2 : [ a+b | (a,b) <- zip fibs (tail fibs)]
evens :: Integer -> Integer -> Integer
evens x sum | (even x) = x + sum
| otherwise = sum
main = do
print (foldr evens 0 (take 4000000 fibs))
Hugs は、「ガベージ コレクションが十分なスペースを再利用できません」というエラーを表示します。これは、foldr
.
これを修正するにはどうすればよいですか? アキュムレータを使用する末尾再帰 (と思う) バージョンを作成しようとしましたが、それも機能しませんでした。