【发布时间】:2014-05-27 15:25:30
【问题描述】:
我在 Haskell 中编写了自己的“求和”函数:
mySum [a] = a
mySum (a:as) = a + mySum as
并用它测试过
main = putStrLn . show $ mySum [1 .. 400000000]
只接收堆栈溢出错误。
以同样的方式使用 Prelude 的总和:
main = putStrLn . show $ sum [1 .. 400000000]
我没有堆栈溢出。
这可能是我正在评估的巨大列表,特别是如果传递给我的函数的列表正在被严格评估,尽管我不怀疑这一点的唯一原因是使用 Prelude 的总和与相同的列表我没有得到错误。
【问题讨论】:
-
此问题与stackoverflow.com/questions/13042353/… 重复,所以也请在那里寻找答案。