Haskell 如果一个数字是素数,创建一个输出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

我有一个名为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 :: [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..]