Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function Haskell模式匹配在负数上失败_Function_Haskell_Functional Programming_Pattern Matching - Fatal编程技术网

Function 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

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,还需要括号

因为
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)