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
使用否定文字,您还需要括号。
关于function - Haskell 模式匹配在负数上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16976543/