diff --git a/contrib/20.r7rs/scheme/lazy.scm b/contrib/20.r7rs/scheme/lazy.scm index f429dcd0..d934ad45 100644 --- a/contrib/20.r7rs/scheme/lazy.scm +++ b/contrib/20.r7rs/scheme/lazy.scm @@ -30,7 +30,11 @@ (let ((v (promise-value p))) (case (promise-state p) ((cached) v) - ((chained) (force v)) + ((chained) (let () + (when (eq? 'cached (promise-state v)) + (set-promise-state! p 'cached) + (set-promise-value! p (promise-value v))) + (force v))) ((pending) (let ((q (v))) (when (eq? 'pending (promise-state p)) (set-promise-state! p 'chained)