簡體   English   中英

Haskell模式匹配失敗的負數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM