函数 max 中的非详尽模式
Non-exhaustive patterns in function max
在 ghci 中这个代码:
let max [] = error "maximum of empty list"
let max [x] = x
let max (x:xs)
| x > maxTail = x
| otherwise = maxTail
where maxTail = max xs
导致错误:*** Exception: <interactive>:26:5-106: Non-exhaustive patterns in function max
这里的不竭格局是什么?满足零元素、单元素和多元素列表 ?
更新:
更新 2:
更新 3:
在 Debian 上按预期工作 (Raspberry Pi):
GHCi(通常 let
)不允许您以这种方式定义函数。您只需定义 3 个函数,每次都用另一个函数覆盖。
如果您想继续使用 GHCi,请这样写:
let max list = case list of
[] -> error "maximum of empty list"
[x] -> x
(x:xs) ->
if x > maxTail then x else maxTail
where maxTail = max xs
通过使用三个单独的 let
,您定义了三个单独的、非详尽无遗的函数,名为 max
,每个函数都覆盖了之前的函数。为了使用 let
定义多案例函数,您可以使用 let
关键字 ones,然后在每个模式的相同缩进处重复函数签名,如下所示:
let max [] = error "maximum of empty list"
max [x] = x
max (x:xs)
| x > maxTail = x
| otherwise = maxTail
where maxTail = max xs
为了让这个(或任何其他占用多行的代码)在 GHCI 中工作,您需要通过输入 :{
来启动多行模式,然后使用:}
或使用 ;
而不是换行符将其全部写在一行中(除了在 |
之前你只写 |
没有 ;
或行在前面突破)。
在 ghci 中这个代码:
let max [] = error "maximum of empty list"
let max [x] = x
let max (x:xs)
| x > maxTail = x
| otherwise = maxTail
where maxTail = max xs
导致错误:*** Exception: <interactive>:26:5-106: Non-exhaustive patterns in function max
这里的不竭格局是什么?满足零元素、单元素和多元素列表 ?
更新:
更新 2:
更新 3:
在 Debian 上按预期工作 (Raspberry Pi):
GHCi(通常 let
)不允许您以这种方式定义函数。您只需定义 3 个函数,每次都用另一个函数覆盖。
如果您想继续使用 GHCi,请这样写:
let max list = case list of
[] -> error "maximum of empty list"
[x] -> x
(x:xs) ->
if x > maxTail then x else maxTail
where maxTail = max xs
通过使用三个单独的 let
,您定义了三个单独的、非详尽无遗的函数,名为 max
,每个函数都覆盖了之前的函数。为了使用 let
定义多案例函数,您可以使用 let
关键字 ones,然后在每个模式的相同缩进处重复函数签名,如下所示:
let max [] = error "maximum of empty list"
max [x] = x
max (x:xs)
| x > maxTail = x
| otherwise = maxTail
where maxTail = max xs
为了让这个(或任何其他占用多行的代码)在 GHCI 中工作,您需要通过输入 :{
来启动多行模式,然后使用:}
或使用 ;
而不是换行符将其全部写在一行中(除了在 |
之前你只写 |
没有 ;
或行在前面突破)。