Function Haskell模式匹配在负数上失败
Haskell编译器在以下函数上引发错误:Function Haskell模式匹配在负数上失败,function,haskell,functional-programming,pattern-matching,Function,Haskell,Functional Programming,Pattern Matching,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
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,还需要括号
因为f-1=…
被解析为f-1=…
如果你不知道,它的意思与:
(-) f 1 = ....
这类似于定义这样的函数:
somefunc x 1 = x + 1
x `somefunc` 1 = x + 1
这恰好相当于像这样定义somefunc():
somefunc x 1 = x + 1
x `somefunc` 1 = x + 1
只是使用(-)时,在中缀位置(即位于其两个参数之间)使用它时,不必写反勾号
我看过的两本haskell开头的书都很早就警告过你,一元数-需要与括号一起使用,例如(-3)