使用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