Next: always-never-thereis, Up: End-Test Control [Contents][Index]
while expr until expr
allows iteration to continue until the specified expression expr
evaluates
to nil
. The expression is re-evaluated at the location of the ‘while’
clause.
is equivalent to ‘while’ (not expr)
. If the value of the specified
expression is non-nil, iteration terminates.
You can use ‘while’ and ‘until’ at any point in a loop. If a ‘while’ or ‘until’ clause causes termination, any clauses that precede it in the source are still evaluated.
If the ‘while’ or ‘until’ construct causes termination, control is passed to the loop ‘epilogue’, where any ‘finally’ clauses will be executed.
;;; A classic "while-loop". (loop while (hungry-p) do (eat))
;;; UNTIL NOT is equivalent to WHILE. (loop until (not (hungry-p)) do (eat))
;;; Collect the length and the items of STACK. (let ((stack '(a b c d e f))) (loop while stack for item = (length stack) then (pop stack) collect item))
;;; Use WHILE to terminate a loop that otherwise wouldn't ;;; terminate. Note that WHILE occurs after the WHEN. (loop for i fixnum from 3 when (oddp i) collect i while (< i 5))