【发布时间】:2022-01-14 22:25:51
【问题描述】:
我是 SML 的新手。我正在尝试创建一个函数,该函数使用埃拉托色尼筛法输出小于或等于给定整数 n > 2 的所有素数的列表。我遇到了一个问题,但是输出仅显示为 [1]。我希望能够输入诸如 5 并得到 [1,3,5] 的结果。
这是我目前的代码,我很新,所以我知道它很可能写得不正确。
fun createList(ending) =
let
fun createListX(start, ending) =
if start = ending then []
else start :: createListX(start + 1, ending)
in
createListX(1, ending + 1)
end;
fun removeMult ([], n) = []
| removeMult (x::xs, n) =
if x mod n = 0 then
removeMult(xs, n)
else
x :: removeMult(xs, n);
fun sieve([], primes) = primes
| sieve(n::ns, primes) = sieve(removeMult(ns, n), n :: primes);
fun dosieve(n) = sieve(createList(n-1), []);
【问题讨论】:
标签: function primes sml smlnj sieve-of-eratosthenes