List & Vector Iteration

Iterating over a list

  • loop for ... in
  • loop's accumulating clauses
  • dolist
    • early exits
(loop for x in '(1 3 5)
    collect (print x))
  • do is used for side effects

  • collect returns a list of results

  • more you can use instead: count, maximize, sum...

  • a bit more lisp-y:

(dolist (x '(1 3 5))
    (when (> x 2)
        (return x))
    (print x))

Iterating over a Vector (arrays)

  • loop for ... across ...
(loop for x across #(0 2 4)
    sum (print x))

One single construct to iterate on lists and vectors?

  • loop for ... being the element of ...
  • coerce to a list: efficient.
  • for:for ... over in quicklisp: speed penalty.