-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Thu, 11 Jun 1998 10:23:51 -0500, "Kenneth D. Forbus"
<ils.nwu.edu at forbus> wrote:
>Maybe I'm old-fashioned, but I find DO -- which is part of the common
>lisp spec -- is just as easy to use, is more flexible, and displays
>well under pretty-printing.
Do you prefer
(defun primes (n)
(when (> n 1)
(let* ((primes (list 2))
(last primes)
(max (floor (sqrt n))))
(do ((i 3 (+ i 2)))
((> i n) primes)
(do* ((next primes (rest next)))
((or (null next)
(> (first next) max))
(rplacd last (list i))
(setq last (rest last)))
(when (zerop (rem i (first next)))
(return)))))))
over
(defun primes (n)
(when (> n 1)
(loop
with primes = (list 2)
with max = (floor (sqrt n))
with last = primes
for i from 3 to n by 2
do (loop
for p in primes
until (> p max)
never (zerop (rem i p))
finally
(rplacd last (list i))
(setq last (rest last)))
finally (return primes))))
then?
Curiously, in ACL4W 3.0.2, with '(optimize (speed 0) (safety 3)) the
second version is about 10% slower than the first; and with
speed3/safety0 they are 'bout the same.
(Yes, I admit neither one is a good example of lisp programming;
I'm just learning my way into CL ;)
/L/e/k/t/u
-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 5.5.3i; see <http://www.pgpi.com>
iQA/AwUBNYEoO/4C0a0jUw5YEQLbtwCgw6D6AikuucrSz6H1h65uwWei+U0AoIQI
oWPg4KHgWMLXl9Mo2/cADjwy
=0lOg
-----END PGP SIGNATURE-----