[只是尝试执行HalDauméIII的YAHT手册的练习3.7(p。31),我试图定义斐波那契函数:
fibo 1 = 1
fibo 2 = 1
fibo n = fibo(n-1) + fibo(n-2)
然后我要求
fibo(3)
并且得到:
*** Exception: stack overflow
[当我查看练习的解法时,我发现完全相同的代码(不同之处是该函数称为fib而不是fibo)。我在做什么错?
(该手册来自2006年,也许两者之间的语言已更改?)(具有讽刺意味的是,我问stackoverflow的堆栈溢出问题...)
这可能是一次在ghci
中定义功能的结果。这意味着您首先定义一个函数fibo 1 = 1
。然后,使用名称fibo
(具有fibo 2 = 2
)定义another函数,该函数的作用域更局限,最后定义一个名为fibo
的第三个函数。
您可以在:{
和:}
之间包装多行函数,从而定义由三个子句组成的one函数fibo
:
Prelude> :{
Prelude| fibo 1 = 1
Prelude| fibo 2 = 1
Prelude| fibo n = fibo (n-1) + fibo (n-2)
Prelude| :}
Prelude> fibo 3
2