简单 Haskell 斐波那契函数卡住了

Simple Haskell Fibonacci function gets stuck

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

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

然后

fib 5

控制台挂起并死掉:

: Out of memory

我做错了什么?

通过将声明分别键入 ghci,每个声明都被读取为 fib 的单独定义,隐藏其前身。换句话说,你实际上是 运行

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

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

在控制台,您还没有为 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-case 函数。

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

> let fib 0 = 0
> fib 1 = 1

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