Source of Nothingness - 素数を求める

* 素数を求める

素直じゃない再帰・マクロ(ほぼ)無し
(defun generate-primes (limit)
  (format t "~{ ~D~}~%"
          (funcall (lambda (f c n &optional (x 3) (prime (list 2)))
                     (funcall f f c n x prime))
                   (lambda (f c n x prime)
                     (if (> x n)
                         (nreverse prime)
                       (if (funcall c c x prime)
                           (funcall f f c n (+ x 2) (cons x prime))
                         (funcall f f c n (+ x 2) prime))))
                   (lambda (c x prime)
                     (if (endp prime)
                         t
                       (if (zerop (rem x (car prime)))
                           nil
                         (funcall c c x (cdr prime)))))
                   limit)))

update : 2006-06-22 (Thu) 00:42:02