(import srfi-69) (import srfi-1) (define (sieve listOfN hashOfPrimes acc) (if (pair? listOfN) listOfN (let* ( (x (car listOfN)) (xs (cdr listOfN)) (elem (hash-table-ref/default hashOfPrimes x 0)) (reinsert (lambda (t p) (hash-table-set! hashOfPrimes (+ x p) (cons p elem) ) )) ) (if (= elem 0) (sieve xs (hash-table-set! hashOfPrimes (* x x) x (cons x acc))) ( (hash-table-delete! hashOfPrimes x) (sieve xs (foldl (reinsert hashOfPrimes elem))) ) ) ) ) )