haskell中的模式匹配错误
你好,我一直在尝试回答一个关于检查一个数字是否是素数的问题。我想出了以下代码:haskell中的模式匹配错误,haskell,pattern-matching,primes,Haskell,Pattern Matching,Primes,你好,我一直在尝试回答一个关于检查一个数字是否是素数的问题。我想出了以下代码: 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 &am
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
isitprome::Int->Bool
isitprime n
|任天堂->布尔
IsitTime 2 x y
|y>1&&x`mod`y==0=False
|y==1&&x`mod`y==0=True
当在winhugs中运行时,对于任何大于2的值,它都会返回一个错误,称为“模式匹配失败:isitprime2 a-1”
但是,对于直接乘以2的任何值,它都返回false,例如isitprime2 2 1返回false、isitprime2 4 2、isitprime2 6 3、isitprime2 10 5等。所有这些值都返回false
出了什么问题,为什么
谢谢:D函数的问题在于它不能处理所有情况。比如当:
y>1&&x模y!=0
y==1&&x模y!=0
否则
子句来处理所有边缘情况:
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
伟大的谢谢!!:D