Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(eval-when :compile
  (sys::load 'stdlib))

(defun sieve (n)
  (let ((field (vec))
        (primes (vec)))
    (range (i (0 (+ n 1)))
           (push field (or)))
    (range (f (2 (+ n 1)))
           (unless (get field f)
             (push primes f)
             (let ((j f))
               (while (<= j n)
                 (set (get field j) (and))
                 (set j (+ j f))))))
    primes))

(println (sieve 100000))