Haskell 如果一个数字是素数,创建一个输出true或false的函数?
我有一个名为primeTest的函数,它应该为无穷大的每个n元素输出True或false,无论它是否为素数Haskell 如果一个数字是素数,创建一个输出true或false的函数?,haskell,Haskell,我有一个名为primeTest的函数,它应该为无穷大的每个n元素输出True或false,无论它是否为素数 divides :: Integer -> Integer -> Bool divides x y = y `mod` x == 0 prime :: Integer -> Bool prime n = n > 1 && and [not(divides x n) | x <- [2..(n-1)]] allprimes :: [Inte
divides :: Integer -> Integer -> Bool
divides x y = y `mod` x == 0
prime :: Integer -> Bool
prime n = n > 1 && and [not(divides x n) | x <- [2..(n-1)]]
allprimes :: [Integer]
allprimes = [x | x<- [2..], prime x]
primeTest :: [Bool]
primeTest = [x | x<- [2..], prime x]
我尝试调用all primes函数,但得到的错误是它无法将Integer类型与Bool匹配,有什么建议吗?谢谢。primeTest函数的定义与allprimes函数的定义相同;这两个定义都有[Integer]类型,所以这当然会发生冲突,因为您刚刚告诉它您将提供[Bool]
很可能,您的意思是,不是生成元素列表,使该元素为素数,而是为每个元素生成,无论该元素是否为素数。想想看:
[ | x <- [2..], ]
^ ^ condition on whether to include it in the list
what to include in the final list
您对allPrimes和primeTest的定义完全相同,因此,如果allPrimes是一个整数列表,那么primeTest也是一个整数列表,而不是您的类型签名断言的布尔列表,您不应该感到惊讶
primeTest最简单的定义是:
primeTest :: [Bool]
primeTest = [ prime x | x<- [2..] ]
这就是你想要的吗?所以从要包含的内容中去掉x,而不是让我困惑的x。
primeTest = map prime [2..]