【发布时间】:2021-04-18 05:05:36
【问题描述】:
我正在编写这个函数 len,它计算 GHCi 中列表的长度。
len [] = 0
len [x] = 1
len (x:xs) = 1 + len xs
我试图以[] 作为参数调用该函数,但错误Exception: Non-exhaustive patterns in function len 击中了我。我不是已经在函数定义中包含了空列表案例吗?
【问题讨论】:
-
GHCi 中的多行定义为tricky to enter。如果您将代码编写在 .hs 文件中,然后在 GHCi 中编写
:load会更容易。在您的情况下,最后一行被解释为覆盖前一行的定义,有效地忽略了前两行,因此出现错误。 -
顺便说一句,您不需要单例列表案例(您的中间线),因为它被一般的非空列表案例(底线)覆盖(具有相同的结果)。具体来说,
[x]是x : []的语法糖 -
这能回答你的问题吗? Non exhaustive pattern in function in GHCi
标签: haskell read-eval-print-loop ghci non-exhaustive-patterns multiline-repl-definition