该函数firstnprimes
应该返回第一个n
素数。参数是n
素数的数量,nlist
一个 2-m 整数的列表。和slist
是解决方案列表,最初为空,每次调用 firstnprimes 时都会添加和重构。
它的工作原理是从列表中删除第一个数字,然后从nlist
with中删除该数字的所有倍数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)))))))