next up previous contents index
: 遅延評価 : 制御構造 : 変数束縛と局所関数   目次   索引

繰り返し

(do (《節$_1$$\cdots$《節$_m$》) (《終了条件》《式$_1$$\cdots$《式$_n$》)《本体》) 【特殊フォーム】

各 《節》 は次のいずれかの形を取る.

do式は以下のように実行される.

  1. 各 《初期値》 を評価し, その値を対応する 《変数》 にバインドする.

  2. 《終了条件》 を評価し, その値が #fであればステップ3へ進む. その値が #f以外なら 《式$_1$$\sim$ 《式$_n$》 を順に評価し 《式$_n$》 の値が do式の値となる. 《式》 が1つも与えられないときは () do式の値となる.

  3. 《本体》 の各フォームを順に評価する.

  4. 各 《ステップ》 を評価し対応する局所変数にバインドする. 《ステップ》 がない場合は対応する 《変数》 の値は更新されない.

  5. ステップ2へ戻る.

例:

(do ((x '(1 3 5 7 9) (cdr x))    

(sum 0))
((null? x) sum)
(set! sum (+ sum (car x))))
$\Rightarrow$ 25

(dolist (《変数》《リスト式》[《結果式》])《本体》) 【マクロ】

dolist式はまず 《リスト式》 を評価する. その値はリストでなければならない. その各要素を順に《変数》 の値として要素ごとに 《本体》 を実行する. 最後に 《結果式》 を評価し,その値を返す. 《結果式》 が与えられない時は ()を返す. 次の do式と等価である.

(do ((TEMP 《リスト式》 (cdr TEMP)))   

((null? TEMP) [《結果式》])
(let ((《変数》 (car TEMP)))
《本体》))
ここで,局所変数 TEMP dolist式の中に現れない変数とする. (dotimes (《変数》《整数式》[《結果式》])《本体》) 【マクロ】

dotimes式はまず 《整数式》 を評価する. その値は整数でなければならない. $0$以上 《整数式》 の値未満の整数を順に 《変数》 の値として各整数ごとに 《本体》 を実行する. 最後に 《結果式》 を評価し,その値を返す. 《結果式》 が与えられない時は ()を返す. 次の do式と等価である.

(let ((TEMP 《整数式》))  

(do ((《変数》 0 (1+《変数》)))
((>= 《変数》TEMP) [《結果式》])
《本体》)
ここで,局所変数 TEMP dotimes式の中に現れない変数とする.


next up previous contents index
: 遅延評価 : 制御構造 : 変数束縛と局所関数   目次   索引
Tsuneyasu KOMIYA 平成14年2月22日