我正在运行GHCi控制台,并输入
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
然后
fib 5
并且控制台挂起并死于:
:内存不足
我做错了什么?
答案 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 '='