[英]Pattern matching error in haskell
您好,我一直在嘗試回答一個有關檢查數字是否為質數的問題。 我想出了以下代碼:
isitprime :: Int->Bool
isitprime n
| n<=1 = False
| otherwise = isitprime2 n (n-1)
isitprime2 :: Int->Int->Bool
isitprime2 x y
| y > 1 && x `mod` y == 0 = False
| y == 1 && x `mod` y == 0 = True
當在winhugs中運行時,對於任何大於2的值,它都會返回一條錯誤消息“模式匹配失敗:isitprime2 a a-1”。
但是,對於直接乘以2的任何值,它返回false,例如isitprime2 2 1返回false,isitprime2 4 2,isitprime2 6 3,isitprime2 10 5等。都返回false。
怎么了,為什么?
感謝:D
函數isitprime2
的問題在於它不能處理所有情況。 就像在以下情況下會發生什么:
y > 1 && x mod y != 0
y == 1 && x mod y != 0
處理其他情況,您的代碼將正常工作。 您還可以使用otherwise
子句來處理所有邊緣情況:
isitprime2 :: Int->Int->Bool
isitprime2 x y
| y > 1 && x `mod` y == 0 = False
| y == 1 && x `mod` y == 0 = True
| otherwise = ??? -- handle all edge case
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.