函数 – Haskell模式匹配在负数上失败 - 代码日志

函数 – Haskell模式匹配在负数上失败

Haskell编译器在以下函数上引发错误:

balancedMax :: Int -> Int -> Int
balancedMax -1 _ = -1
balancedMax _ -1 = -1
balancedMax a b = max a b

翻转标志解决问题:

balancedMax :: Int -> Int -> Int
balancedMax 1 _ = -1
balancedMax _ 1 = -1
balancedMax a b = max a b

为什么模式匹配失败的负面,什么是干净的解决方法?

它失败了,因为它认为你试图重新定义减号运算符,因为f -1 = …被解析为f – 1 = ….

要解决这个问题,你只需要添加括号:

balancedMax :: Int -> Int -> Int
balancedMax (-1) _ = -1
balancedMax _ (-1) = -1
balancedMax a b = max a b

表达式中也发生同样的事情。要使用负面字面值调用balancedMax,您还需要括号。

http://stackoverflow.com/questions/16976543/haskell-pattern-matching-fails-on-negative-number

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:函数 – Haskell模式匹配在负数上失败