我正在学习 Haskell,并且在使用本教程中的基本阶乘函数时遇到了问题。
基本上,我已经定义了一个阶乘:
Prelude> let factorial 0 = 1
Prelude> let factorial n = n * factorial (n - 1)
类型检查:
Prelude> :t factorial
factorial :: Num a => a -> a
这是有道理的。但是,此函数的行为不会。(interactive): out of memory
无论输入是什么,它都会导致。
Prelude> factorial 5
(interactive): out of memory
我不得不假设这是一个导致内存不足错误的无限递归调用,但我不确定是什么可能导致它。发生同样的事情factorial 0
,即使我已明确声明它为 1:
Prelude> factorial 0
(interactive): out of memory
现在,这是奇怪的部分:如果我在文件中定义阶乘函数,它工作正常。我创建一个文件tesths.hs
st:
factorial 0 = 1
factorial n = n * factorial (n - 1)
然后,如果我回到 GHCI 并运行:l tesths.hs
,我可以毫无错误地执行factorial 5
。
这里发生了什么?