【发布时间】:2020-05-05 14:03:06
【问题描述】:
我对 SML 代码非常陌生,我正在尝试创建一个函数来返回所有素数列表,直到用户给出的数字。除了我的数字、索引和 lst 变量不断出现未绑定变量或构造函数错误外,我的大多数函数都在工作。代码应该使用两个辅助函数来遍历两个索引并将它们相乘,从而将非素数从列表中取出。这是我的代码:
fun removeMult (lst,n) = if null lst then lst else if hd lst mod n = 0 then removeMult(tl lst, n) else (hd lst) :: removeMult(tl lst, n);
fun helpertwo(lst, ind : int, n : int, indtwo : int) = if indtwo = n then lst else helpertwo(removeMult(lst , ind*indtwo),ind,n,indtwo+1);
fun test(lst,number,index) =
if
number = index
then
lst
else
helpertwo(lst, index, number, 2);
test(lst,number,(index+1));
fun primes (n : int) =
if
(n <= 1)
then
[]
else
makelist(n);
removeMult(lst , 1);
test(lst, n , 2);
【问题讨论】:
-
您需要使用您的函数产生的结果。此外,删除 1 的所有倍数不会留下许多“质数”。
-
谢谢@molbdnilo 我知道1的倍数,这就是为什么这两个函数的起始索引都是2。我试图弄清楚如何设置变量atm,因为我相信那是我遇到的问题。
-
你需要学习如何在没有赋值和排序的情况下进行编程。