反復
Lispにおける反復の表現方法.
Lispにおける反復の表現方法の一つはdo式である.
(do 変数指定のリスト (反復条件 終了式1 終了式2 ....) (反復式))doの第一引数変数指定のリストの各要素はリストであり以下の形である.
(変数 初期値 更新方法)第二引数は式のリストであり,最初の式が終了判定に使用される.この判定が偽ならば続く終了式1,2..(※)が評価される.真ならば反復式を評価する.以下に0から10をプリントアウトする例を示す.
> (do '(i 0 (+ i 1)) ((> i 10) 'done) (format t "~A~%" i)) 0 1 2 3 4 5 6 7 8 9 10 DONE続く例は変数指定のリストに二つの式を指定し,0から10までの総和を求めるものである.終了判定が偽の場合に評価する式はない.
(do ((i 0 (+ i 1)) (sum 0 (+ sum i))) ((> i 10) sum))
※終了判定が真の場合に実行される式である「終了式」という名前はここで便宜上つけただけで,一般的な名前ではない.
dolistはリストの要素毎に反復する.
(dolist (変数 リスト) 式)これはPerlのforeachに似ている.リストの各要素を順に変数に格納し,式を実行する.以下はリスト(1 2 3 4 5)の各要素を順に変数aに格納し出力するものである.
(dolist (a '(1 2 3 4 5)) (format t "~A~%" a)) 1 2 3 4 5 NIL最後のNILはdolist式全体の評価値で,(たぶん)dolist式の評価値は常にNILである.