使用if的详尽模式

我有以下功能:

myMaximum [] = error "There is no such thing as 'maximum' in an empty list."
myMaximum [x] = x
myMaximum (x:xs) = if x >= tailMax
                    then x
                    else tailMax
                where tailMax = myMaximum xs

当我运行myMaximum [1..5] ,我工作得很好,但是当我运行myMaximum [5..1]时,它会引发第一行定义的错误。 如果我把第一行写出来,它会抱怨myMaximum上有一个非穷尽的模式。 但为什么这种模式不完全? 如何用[1..5]调用它很好, [5..1]显然会导致myMaximum空列表参数?


这不是关于你的功能。 这是关于范围表示法。 在ghci中键入[5..1] ,你会发现你得到一个空列表。

除非您使用[first,second..last]表示法明确更改,否则Haskell范围表示法默认在每个步骤中添加一个。 使用[5,4..1]来获得你正在寻找的行为。

如果您删除了函数的第一个版本,则该模式不完全,因为您的函数的版本不能与空列表匹配。

链接地址: http://www.djcxy.com/p/43281.html

上一篇: exhaustive patterns using if

下一篇: Calculating the length of an array in haskell