【发布时间】:2018-03-17 08:17:22
【问题描述】:
我最近开始使用 Haskell,并定义了这个看似简单的函数:
f 0 = 1
f x = x * f x - 1
但是,结果是这样的:
GHCi, version 8.2.1: http://www.haskell.org/ghc/ :? for help
Prelude> f 0 = 1
Prelude> f x = x * f x - 1
Prelude> f 10
*** Exception: stack overflow
Prelude>
【问题讨论】:
-
GHCi 没有意识到您正在定义 one 函数
f。它逐行进行,因此f x = x * f x - 1是一个函数f,它隐藏了f(f 0 = 1) 的先前定义。要输入多行块,请输入:{。使用:}关闭该块。 -
您的函数定义还使用
f x定义了f x。您的定义意味着f x = x * (f x) - 1,而不是x * (f (x - 1)) -
@Alec 没用:Prelude> :{ Prelude| f 0 = 1 前奏| f x = x * f x - 1 前奏| :} Prelude> f 10 *** 例外:堆栈溢出 Prelude>
-
@MarkNeu 当然不是,但不是出于同样的原因。请注意,
x * f x - 1被解析为(x * f x) - 1。你的意思是x * f (x - 1)?