F.L*_*lan 0 haskell pattern-matching guard-clause
所以我正在尝试构建一个函数,它接受一个元组列表并找到具有最大第二元素的元组.但我得到一个模式匹配错误.
这是我的代码.
resultTuple :: [((Int,Int),Int)] -> (Int,Int)
resultTuple [] = error "something wrong"
resultTuple [x] = fst(x)
resultTuple (x:y:xs)
| snd(x) >= snd(y) = resultTuple(x:xs)
| snd(x) < snd(y) = resultTuple(y:xs)
Run Code Online (Sandbox Code Playgroud)
这是我的错误.
Pattern match(es) are non-exhaustive
In an equation for ‘resultTuple’: Patterns not matched: (_:_:_)
Run Code Online (Sandbox Code Playgroud)
您的所有情况x:y:xs都有条件,编译器警告您没有涵盖所有条件都为假的情况.也就是说,编译器警告有关其中两个的情况snd x >= snd y和snd x < snd y是假的.
当然,这实际上不可能发生,但编译器没有意识到这一点.要摆脱警告,您只需用第二个条件替换即可otherwise.