【发布时间】:2013-04-12 18:11:35
【问题描述】:
我正在学习 Haskell,但在使用 this tutorial 的基本阶乘函数时遇到问题。
基本上,我已经定义了一个阶乘:
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 s.t.:
factorial 0 = 1
factorial n = n * factorial (n - 1)
然后,如果我回到 GHCI 并运行 :l tesths.hs,我可以毫无错误地执行 factorial 5。
这里发生了什么?
【问题讨论】: