Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haskell中的模式匹配错误_Haskell_Pattern Matching_Primes - Fatal编程技术网

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