我刚刚开始学习 Haskell,并将阅读书籍和教程与解决 Project Euler 的问题结合起来。我一直坚持问题 27,因为使用以下代码出现“C 堆栈溢出”错误:
欧拉文件
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]]
请您告诉我,为什么会出现错误以及如何解决?谢谢!
我使用 WinHugs。