簡體   English   中英

Haskell中的模式匹配錯誤

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

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