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