为什么该功能不能在Haskell中终止?

Jon*_*ton 8 haskell

我很困惑,为什么我的功能nest,其组成f与自己n时代

nest f 0 = id
nest f n = f . nest f (n - 1)
Run Code Online (Sandbox Code Playgroud)

永不终止。我本以为在n为零的情况下会“匹配模式” 。我通过在GHCI中键入这两行并使用nest (+ 1) 2 3进行调用来定义它。

Emi*_*ily 12

通过在两条单独的REPL行上键入该函数,实际上是在第二次重新定义它,而忽略了基本情况。

将此功能输入REPL的正确方法是:

nest f 0 = id; nest f n = f . nest f (n - 1)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用:{命令进入多行模式,然后使用保留它:}


Tho*_*son 6

当您将其粘贴到GHCi中时,您所做的就是定义的一个功能nest f 0 = id。然后您说:“忽略该函数,我将其替换为同名的新函数,其中整个定义为nest f n = f . nest f (n - 1)