Next: Nonlocal Exits, Previous: Combining Conditions, Up: Control Structures [Contents][Index]
Iteration means executing part of a program repetitively. For
example, you might want to repeat some computation once for each element
of a list, or once for each integer from 0 to n. You can do this
in SXEmacs Lisp with the special form while
:
while
first evaluates condition. If the result is
non-nil
, it evaluates forms in textual order. Then it
reevaluates condition, and if the result is non-nil
, it
evaluates forms again. This process repeats until condition
evaluates to nil
.
There is no limit on the number of iterations that may occur. The loop
will continue until either condition evaluates to nil
or
until an error or throw
jumps out of it (see Nonlocal Exits).
The value of a while
form is always nil
.
(setq num 0) ⇒ 0
(while (< num 4) (princ (format "Iteration %d." num)) (setq num (1+ num))) -| Iteration 0. -| Iteration 1. -| Iteration 2. -| Iteration 3. ⇒ nil
If you would like to execute something on each iteration before the
end-test, put it together with the end-test in a progn
as the
first argument of while
, as shown here:
(while (progn (forward-line 1) (not (looking-at "^$"))))
This moves forward one line and continues moving by lines until it
reaches an empty. It is unusual in that the while
has no body,
just the end test (which also does the real work of moving point).
Another—more powerful—way to do iteration is using the special
CL-macro loop
but requires the cl-macs library to be
loaded.
Next: Nonlocal Exits, Previous: Combining Conditions, Up: Control Structures [Contents][Index]