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

时间:2019-11-17 20:00:56

标签: haskell

我很困惑为什么我的函数nestf次组成n的原因

nest f 0 = id
nest f n = f . nest f (n - 1)

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

2 个答案:

答案 0 :(得分:12)

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

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

nest f 0 = id; nest f n = f . nest f (n - 1)

或者,您可以使用:{命令进入多行模式,并使用:}退出多行模式。

答案 1 :(得分:6)

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