功能最大的非穷举模式

blu*_*sky 1 haskell ghci winghci

在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 
Run Code Online (Sandbox Code Playgroud)

导致错误: *** Exception: <interactive>:26:5-106: Non-exhaustive patterns in function max

这里有不可耗尽的模式是什么?零元素,单元素和多元素列表可以满足吗?

更新: 在此输入图像描述

更新2:

在此输入图像描述

更新3:

在Debian(Raspberry Pi)上按预期工作:

在此输入图像描述

sep*_*p2k 8

通过使用三个单独的lets,您将定义三个单独的,非详尽的函数max,每个函数都会影响前面的函数.为了定义一个多案例函数使用let,你使用let关键字1,然后只需在每个模式的相同缩进处重复函数签名,如下所示:

let max [] = error "maximum of empty list"
    max [x] = x
    max (x:xs)
      | x > maxTail = x
      | otherwise = maxTail
      where maxTail = max xs
Run Code Online (Sandbox Code Playgroud)

为了使这个(或任何其他代码占用多行)在GHCI中工作,你需要通过输入:{然后退出它来启动多行模式,:}或者用一行;代替它来代替换行符(除了|你刚才写的|没有;前面或换行符之前).