Lispのdoループ(その2)
以前やったとき、うまくいかなかったのは単に構造、というか括弧の付け方を間違えていただけと判明。以下のようにすることでうまくいった。
(do ((i 0 (incf i))) ((< 10 i)) (format t "~A " i))
括弧の使い方に間違いがあった。再度、doの構文を確認。
(do ((value1 value1-initial-value value1-next-value) (value2 value2-initial-value value2-next-value) ... (valueN valueN-initial-value valueN-next-value)) ((finish-judgement-1 ...)) (body-functions ...))
こんな感じのはず。また括弧の数間違えていたらイヤだな・・・
気を付けないといけないのは、
- ループ内で使用する変数は、変数名、初期値、次のループで使用(判定)される値に更新する式
- 終了判定も複数指定できるので、終了判定ブロック内には終了判定文ごとの括弧が必要
という点だろうか。文章で書くのはちょっと難しいかも。とりあえず、やりながら慣れていくしかない。