haskell,计算列表中有多少个质数

| 我是Haskell的新手,目前需要一个函数'f \',给定两个整数,该函数将返回两个函数之间的质数(即,大于第一个整数但小于第二个整数)。
Main>  f 2 4
1
Main> f 2 10
3
到目前为止,这是我的代码,但是效果很好。有什么建议么?谢谢..
f :: Int -> Int -> Int
f x y 
  | x < y = length [ n | n <- [x..y], y \'mod\' n == 0] 
  | otherwise = 0
    
已邀请:
从您的示例来看,您需要开放间隔中的素数(
x
y
),在Haskell中用
[x+1 .. y-1]
表示。 您的原始性测试有缺陷;您正在测试因子ѭ3factors。 要将函数名称用作中缀运算符,请使用反引号(`),而不是单引号(\')。 尝试以下方法:
-- note: no need for the otherwise, since [x..y] == [] if x>y
nPrimes a b  =  length $ filter isPrime [a+1 .. b-1]
读者练习:实施ѭ7。请注意,它仅需一个参数。     
查看您的列表理解功能。
n <- [x..y]
x
y
的列表中画出n。
y `mod` n == 0
只选择均匀地除以y的那些“ 12”。
length (...)
找出有多少这样的
n
。 您的代码当前要做的是找出x和y(含)之间的多少个数字是y的因数。因此,如果您执行
f 2 4
,则列表将为
[2, 4]
(均分4的数字),长度为2。如果您执行
f 2 10
,则列表将为`[2,5,10](均分的数字除以10),则长度为3。 重要的是,您必须自己理解为什么代码不起作用。在这种情况下,这只是错误的算法。对于查找数字是否为质数的算法,以及其他许多来源,您可以查看Wikipedia文章:Primality test。     
我想以较大的间隔工作,那么最好一次计算一个素数列表(而不是对每个数字进行一次isPrime测试):
primes = -- A list with all prime numbers
candidates = [a+1 .. b-1]
myprimes = intersectSortedLists candidates primes
nPrimes = length $ myprimes
    

要回复问题请先登录注册