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