小编use*_*400的帖子

为什么这个递归函数没有被优化?(Haskell的)

我在Haskell中编写了自己的'sum'函数:

mySum [a] = a
mySum (a:as) = a + mySum as
Run Code Online (Sandbox Code Playgroud)

并测试它

main = putStrLn . show $ mySum [1 .. 400000000]
Run Code Online (Sandbox Code Playgroud)

仅收到堆栈溢出错误.

以相同的方式使用Prelude的总和:

main = putStrLn . show $ sum [1 .. 400000000]
Run Code Online (Sandbox Code Playgroud)

我没有堆栈溢出.

它可能是我正在评估的巨大列表,特别是如果传递给我的函数的列表正在严格评估,尽管我不怀疑这个的唯一原因是使用Prelude的总和与相同的列表我没有得到任何错误.

recursion haskell

4
推荐指数
1
解决办法
758
查看次数

标签 统计

haskell ×1

recursion ×1