函数 len 中的非穷举模式

Py *_*hon 1 haskell ghci non-exhaustive-patterns read-eval-print-loop multiline-repl-definition

我正在编写这个函数 len 来计算 GHCi 中列表的长度。

len [] = 0
len [x] = 1
len (x:xs) = 1 + len xs
Run Code Online (Sandbox Code Playgroud)

我试图用[]作为参数调用该函数,但错误Exception: Non-exhaustive patterns in function len击中了我。我不是已经在函数定义中包含了空列表案例吗?

Pau*_*son 6

正如 chi 在评论中所说,GHCi 不是那样工作的。

您可以使用分号在 GHCi 中输入多部分定义,如下所示:

长度 [ ] = 0 ; len (x:xs) = 1 + len xs

(单项列表的情况由第二部分处理,因为[x] == x : []


414*_*wen 6

扩展保罗的答案,您还可以使用 :{, :} 在 ghci 中编写多行定义

例如。

:{
len [] = 0
len (x:xs) = 1 + len xs
:}
Run Code Online (Sandbox Code Playgroud)