迭代列表以检测素数

时间:2016-04-30 21:37:36

标签: haskell primes

我在Haskell做了一个功课,我应该在其中编写一个模块,帮助检测列表中的素数,比如说:

#innerbutton {
...
-margin-top: 25px;
...
}


#button {
...
- margin-top:-30px !important;
+ vertical-align: top;
...
}

对于作业,我应该遍历这个列表的每个元素,并消除它的所有元素。例如,我在第2号,我应该消除4,6,8,10。然后转到数字3并删除6和9,依此类推,直到结束,仅返回带有素数的列表。

我有使用函数[2,3,4,5,6,7,8,9,10] 的想法,但我被困在这个地方(虽然我对Haskell很新)

是的,这是我的作业,但不,我没有 去做,它只是练习。所以我感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

不是使用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 ulo的mod产生零,则简单地省略该值。