Next: Nonlocal Exits, Previous: Combining Conditions, Up: Control Structures
繰り返しとは、プログラムのある部分を何度も実行することです。
たとえば、リストの各要素や0からnの各整数について
1回ずつある計算を行いたい場合です。
Emacs Lispでこれを行うには、スペシャルフォームwhile
を使います。
while
は、まずconditionを評価する。 結果がnil
以外であれば、formsをテキスト上の順で評価する。 そして、conditionを評価し直し、その結果がnil
以外であれば、 再度formsを評価する。 この処理をconditionがnil
に評価されるまで繰り返す。繰り返し回数に制限はない。 ループは、conditionが
nil
に評価される、 エラーが発生する、throw
によりループから抜け出す (see Nonlocal Exits)のいずれかが起こるまで繰り返される。フォーム
while
の値はつねに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終了検査のまえに各繰り返しごとに実行したいことがあれば、 以下のように、それらと終了検査を
progn
でまとめたものをwhile
の第1引数にする。(while (progn (forward-line 1) (not (looking-at "^$"))))これは、1行先へ移動し、空行に達するまで、移動を繰り返す。 この
while
には本体がなく、 終了検査(かつポイントを実際に動かす)だけであるという点で、 風変わりである。