Haskell の学習を始めたばかりで、書籍やチュートリアルを読むことと、Project Euler の問題を解決することを組み合わせています。次のコードを使用すると「C スタック オーバーフロー」エラーが発生するため、問題 27に固執しています。
euler.hs
divisors n = [x | x <- [1..n `div` 2], n `mod` x == 0] ++ [n]
is_prime n = divisors n == [1, n]
f a b = [n^2 + a * n + b | n <- [0..]]
primes_from_zero a b = length(takeWhile is_prime (f a b))
コマンド ウィンドウ
このコマンドは、オイラー係数 1 と 41 (40 個の素数) を返します。
foldr (max) (0, 0, 0) [(primes_from_zero a b, a, b) | a <- [0..10], b <- [0..50]]
これは「Cスタックオーバーフロー」で失敗します(問題の定義にも記載されている係数-79と1601を取得したかった):
foldr (max) (0, 0, 0) [(primes_from_zero a b, a, b) | a <- [-100..0], b <- [1500..1700]]
エラーが発生する理由と解決方法を教えてください。ありがとうございました!
私はウィンハグを使っています。