遍历列表以检测素数

Iterating through a list to detect prime numbers

我在 Haskell 中布置了一个家庭作业,我应该在其中编写一个模块,这有助于从列表中检测素数,例如:

[2,3,4,5,6,7,8,9,10]

对于家庭作业,我应该遍历这个列表的每个元素,并消除所有它的倍数。例如,我排在第 2 位,我应该淘汰 4、6、8、10。然后到第3处删除6和9,以此类推直到结束,return只有质数的列表。

我有使用函数 map 的想法,但我被困在这个地方(不过我对 Haskell 还很陌生)

是的,这是我的作业,但不,我没有做,只是练习。所以我很感谢你的帮助。

而不是使用 map(我认为如果不做一些预处理是不可能的),您可以使用自己的函数:

sieveWith _  [] = []
sieveWith ss (x:xs) | any ((==) 0 . mod x) ss = sieveWith ss xs
                    | otherwise = x : (sieveWith (x:ss) xs)

和:

sieve = sieveWith []

现在如果你调用 sieve:

*Main> sieve [2,3,4,5,6,7,8,9,10]
[2,3,5,7]

该函数使用通过函数调用传递的变量(第一个变量),每次选择,将一个值添加到列表中。如果变量列表上的 no 模运算产生零(第二守卫),则选择一个值。如果 any of the modulo 的结果为零,则该值将被忽略。