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
为什么模式匹配在底片上失败,什么是干净的解决方法?
发布于 2013-06-07 13:05:54
它失败是因为它认为您正在尝试重新定义减号运算符,因为f -1 = ...
被解析为f - 1 = ...
。
要解决此问题,您只需添加括号:
balancedMax :: Int -> Int -> Int
balancedMax (-1) _ = -1
balancedMax _ (-1) = -1
balancedMax a b = max a b
在表达式中也会发生同样的事情。要使用负文字调用balancedMax
,还需要使用圆括号。
https://stackoverflow.com/questions/16976543
复制相似问题