運行下面的程序會打印出「空間溢出:當前大小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