[英]Haskell Pattern Matching Fails on Negative Number
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
這恰好相當於定義somefunc(),如下所示:
x `somefunc` 1 = x + 1
這只是用( - )你在中綴位置使用它時不必編寫反引號,即位於它的兩個參數之間。
我看過的兩本開頭的哈斯克爾書籍都早就警告過你,一元 - 需要與括號一起使用,例如(-3)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.