Lisp の do (反復)
Lispでの繰り返し処理を行うための関数に、do と dolist というのがある。
とりあえず、do を使ってみる。
構文は以下。
(do (変数 初期値 更新方法) (反復終了の判定処理) (処理1) (処理2) ... (処理n))
以下、do を利用するサンプル。
(defun do-sample (start end) (do ((i start (+ i 1))) ; カウンタ変数の定義、初期値設定、更新方法を指定 ((> i end) 'done) ; 反復終了の判定処理 (format t "A~A " i) (format t "B~A " i) (format t "C~A " i)))
これを次のように実行すると、
(do-sample 1 10) A1 B1 C1 A2 B2 C2 A3 B3 C3 A4 B4 C4 A5 B5 C5 A6 B6 C6 A7 B7 C7 A8 B8 C8 A9 B9 C9 A10 B10 C10 DONE
となる。トップレベルにいきなり do の処理を書くことはできないのだろうか。
以下のように試してみたが、
(do (i 0 (+ i 1)) ((> i 10) 'done) (format t "~A " i))
うまくいかなかった。出てきたエラーはこれ。
> Error: While compiling an anonymous function : > 0 is not a symbol., in process Listener(6). > Type cmd-/ to continue, cmd-. to abort, cmd-\ for a list of available restarts. > If continued: continue compilation ignoring this form > Type :? for other options.
意味がわからなかった・・・そのうち、わかってくるだろう。