为什么这不会导致 stackoverflow?
Why doesn't this cause stackoverflow?
在8.hs
我定义
digitProduct [] = 1
digitProduct (c:rest) = (read [c] :: Int) * digitProduct rest
然后在ghci
里面,我运行
digitProduct $ take 10000 $ repeat '9'
它产生了一个结果:
-3633723290617080191
我本以为 10000 的递归会导致计算器溢出。另外,我的递归不是尾调用。这是怎么回事?
没什么特别的。 10,000 不足以填满堆栈。当我将 take 10000
替换为 take 100000000
时,ghci
出现堆栈溢出。
在8.hs
我定义
digitProduct [] = 1
digitProduct (c:rest) = (read [c] :: Int) * digitProduct rest
然后在ghci
里面,我运行
digitProduct $ take 10000 $ repeat '9'
它产生了一个结果:
-3633723290617080191
我本以为 10000 的递归会导致计算器溢出。另外,我的递归不是尾调用。这是怎么回事?
没什么特别的。 10,000 不足以填满堆栈。当我将 take 10000
替换为 take 100000000
时,ghci
出现堆栈溢出。