代码之家  ›  专栏  ›  技术社区  ›  Jon Deaton

为什么这个函数不在Haskell中终止?

  •  0
  • Jon Deaton  · 技术社区  · 5 年前

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

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

    永不终止。我本以为它会在案件上“模式匹配” n个 变成零。我是通过在GHCI中键入这两行并用 nest (+ 1) 2 3 例如。

    2 回复  |  直到 5 年前
        1
  •  5
  •   Emily user7610    5 年前

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

    将此函数输入REPL的正确方法是:

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

    或者,可以使用 :{ 命令,让它使用 :} .

        2
  •  2
  •   Thomas M. DuBuisson    5 年前

    当你把它粘贴到GHCi中时,你所做的是定义 nest f 0 = id . 然后你说“忽略那个函数,我用一个新的同名函数替换它,整个定义是 nest f n = f . nest f (n - 1) .