该函数firstnprimes应该返回第一个n素数。参数是n素数的数量,nlist一个 2-m 整数的列表。和slist是解决方案列表,最初为空,每次调用 firstnprimes 时都会添加和重构。
它的工作原理是从列表中删除第一个数字,然后从nlistwith中删除该数字的所有倍数listminusnonprimes;我知道这是有效的。问题是我无法控制这个动作,如果slist' 的长度等于你想要的素数数量,我会计算每次通过的次数,那么你就完成了。
代码:
(define firstnprimes
(lambda (n nlist slist)
(let ((slist (cons (car nlist) slist)))
(if (zero? n)
slist
(firstnprimes (- n 1) (listMinusNonprimes (car nlist) (car nlist) nlist) slist)))))
(define listminusnonprimes
(lambda (num d lst)
(if (null? lst)
'()
(if (= d (car lst))
(listminusnonprimes num (+ num d) (cdr lst))
(cons (car lst) (listminusnonprimes num d (cdr lst)))))))