运行下面的程序会打印出“空间溢出:当前大小8388608字节”。我已阅读this和this,但仍不知道如何解决我的问题。我正在使用foldr,它不应该保证是“尾递归”吗?如何解决haskell中的“堆栈空间溢出”
直到我知道我应该在使用强大的递归时应该防止“空间溢出”时,我对Haskell感到非常满意。 :)
module Main where
import Data.List
value a b =
let l = length $ takeWhile (isPrime) $ map (\n->n^2 + a * n + b) [0..]
in (l, a ,b)
euler27 = let tuple_list = [value a b | a <-[-999..999] , b <- [-999..999]]
in foldr (\(n,a,b) (max,v) -> if n > max then (n , a * b) else (max ,v)) (0,0) tuple_list
main = print euler27
编辑:除去isPrime
的definiton为简单起见
这是很难用任何功能的语言。作为一个聪明的家伙,我知道曾经说每个抽象都是漏洞。函数式语言非常适合表达自己,并展示算法将正确完成,但他们都必须假设它们具有无限的记忆。 欢迎来到适合你的美丽程序到真正的电脑世界... – Spence 2009-08-18 07:32:37