diff --git a/contrib/20.r7rs/scheme/lazy.scm b/contrib/20.r7rs/scheme/lazy.scm index 88a4739f..c2118797 100644 --- a/contrib/20.r7rs/scheme/lazy.scm +++ b/contrib/20.r7rs/scheme/lazy.scm @@ -43,10 +43,13 @@ (if (promise-done? promise) (promise-value promise) (let ((new-promise ((promise-value promise)))) - (set-promise-done! promise (promise-done? new-promise)) - (set-promise-value! promise (promise-value new-promise)) - (set-box! new-promise (unbox promise)) - (force promise)))) + (if (promise-done? promise) + (promise-value promise) + (begin + (set-promise-done! promise (promise-done? new-promise)) + (set-promise-value! promise (promise-value new-promise)) + (set-box! new-promise (unbox promise)) + (force promise)))))) (define (make-promise obj) (if (and (box? obj) (promise? obj)) diff --git a/contrib/20.r7rs/t/r7rs.scm b/contrib/20.r7rs/t/r7rs.scm index 483e7625..cea02284 100644 --- a/contrib/20.r7rs/t/r7rs.scm +++ b/contrib/20.r7rs/t/r7rs.scm @@ -372,6 +372,16 @@ (force op) (test 'ok (force np))) +(let () + (define flag #f) + (define p (delay (if flag + 'ok + (begin + (set! flag #t) + (force p) + 'ng)))) + (test 'ok (force p))) + (define radix (make-parameter