関数firstnprimes
は最初のn
素数を返すことになっています。引数はn
素数の数で、nlist
2-m の整数のリストです。andslist
は解リストで、最初は空で、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)))))))