为什么这不会导致stackoverflow?

时间:2016-12-12 05:26:59

标签: haskell recursion stack-overflow

8.hs我定义

digitProduct [] = 1
digitProduct (c:rest) = (read [c] :: Int) * digitProduct rest

然后在ghci内,我运行

digitProduct $ take 10000 $ repeat '9'

它会产生一个结果:

-3633723290617080191

我会想象10000的递归会导致堆栈溢出。另外,我的递归不是尾调用。这是怎么回事?

1 个答案:

答案 0 :(得分:3)

没有什么特别的事情发生。 10,000只是不足以填满堆栈。当我用ghci替换take 10000时,我在take 100000000中出现堆栈溢出。