yan*_*nis 1 stack-overflow haskell fibonacci
只是尝试执行 Hal Daumé III 的 YAHT 手册的练习 3.7(第 31 页),我尝试定义斐波那契函数:
fibo 1 = 1
fibo 2 = 1
fibo n = fibo(n-1) + fibo(n-2)
Run Code Online (Sandbox Code Playgroud)
然后我要求
fibo(3)
Run Code Online (Sandbox Code Playgroud)
并得到:
*** Exception: stack overflow
Run Code Online (Sandbox Code Playgroud)
当我查看练习的解决方案时,我发现了完全相同的代码(不同之处在于该函数被称为 fib 而不是 fibo)。我究竟做错了什么?
(手册是 2006 年的,可能中间语言变了?)(讽刺的是我问 stackoverflow 一个堆栈溢出的问题……)
这可能ghci是一次在一行中定义函数的结果。这意味着您首先定义一个函数fibo 1 = 1。然后定义另一个具有更本地范围的名称fibo(with fibo 2 = 2) 的函数,最后定义第三个名为 的函数fibo。
您可以在:{和之间包装多行函数:},从而定义一个fibo由三个子句组成的函数:
Prelude> :{
Prelude| fibo 1 = 1
Prelude| fibo 2 = 1
Prelude| fibo n = fibo (n-1) + fibo (n-2)
Prelude| :}
Prelude> fibo 3
2Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |