定义Haskell Fibonacci时堆栈溢出

问题描述 投票:1回答:1

[只是尝试执行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的堆栈溢出问题...)

haskell stack-overflow fibonacci
1个回答
8
投票

这可能是一次在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
© www.soinside.com 2019 - 2024. All rights reserved.