简单的Haskell Fibonacci函数卡住

时间:2016-10-21 16:35:22

标签: haskell fibonacci

我正在运行GHCi控制台,并输入

fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

然后

fib 5

并且控制台挂起并死于:

  

:内存不足

我做错了什么?

2 个答案:

答案 0 :(得分:2)

通过将声明分别输入到ghci中,每个声明都被视为fib的单独定义,影响其前任。换句话说,您正在有效地运行

fib n = fib (n-1) + fib (n-2)
fib 5  -- infinite recursion here

避免此问题的最简单方法是将fib的定义放入文件中。

答案 1 :(得分:2)

在控制台上,您没有定义具有3种不同情况的单个函数fib;您首先定义fib 0 = 0,然后使用 new 函数fib 1 = 1覆盖它,最后使用没有基本情况的第三个函数fib n = fib (n-1) + fib (n-2)。你可以使用

> fib 0 = 1; fib 1 = 1; fib n = fib (n-1) + fib (n-2)

正确定义单个3个案例的函数。

请注意,这主要是从GHCi 8开始的问题,因为在以前的版本中,您必须使用let来启动定义,并在第二行得到解析错误:

> let fib 0 = 0
> fib 1 = 1

<interactive>:3:7: parse error on input '='