next up previous contents index
: マクロ : 制御構造 : 繰り返し   目次   索引

遅延評価

(delay 《式》) 【特殊フォーム】

《式》 の評価を遅延(delay)する. delayはpromiseとよばれるデータを生成して返す. このpromiseを forceに引数として渡すことにより, promiseが生成された時点の変数環境のもとで《式》 が評価され, その値が得られる.《式》 の評価を, その値が必要となるまで遅延させるのである.

(force 〈データ〉) 【関数】

引数がpromiseであれば, それを生成した delayに渡された 《式》 の値を返す. promise以外のデータの場合は引数をそのまま返す.

delayによって生成された個々のpromiseは, 最初に forceに渡されたときのみ 《式》 が評価され, その値がpromiseの中に保存される. その後,promiseが再び forceに渡された場合は, 《式》 の再評価は行われず,promise内に保存された値が forceの値として返される.

例:

> (define x 0)  

x
> (define y 100)
y
> (define p
(delay (begin (set! x (+ x 1)) y)))
p
> x
0
> y
100
> p
#<promise>
> (force p)
100
> x
1
> p
#<promise>
> (force p)
100
> x
1



Tsuneyasu KOMIYA 平成14年2月22日