SICPを読んでいます。はじめて作りました。どうでしょうか・・・。
(define square
  (lambda (x)
    (* x x)))

(define make-prime
  (lambda (upper)
    (let ((ls (list 2 3)))
      (let f ((x 5))
        (if (> x upper)
            ls
            (let g ((_ls ls))
              (cond
               ((zero? (modulo x (car _ls)))
                (f (+ x 2)))
               ((> (square (car _ls)) x)
                (set! ls (append ls (list x)))
                (f (+ x 2)))
               (else
                (g (cdr _ls))))))))))