Andre van Tonder wrote:
Thank you to Alexandro and John for pointing out the bugs in the implementation. I have fixed them and included the suggested extra tests in the update below.
(define (force promise)
(let ((content (unbox (unbox promise))))
(case (car content)
((eager) (cdr content))
((lazy) (let* ((promise* ((cdr content)))
(content (unbox (unbox promise))))
Shouldn't that last line use promise*? If so, how come your tests pass?
(when (not (eqv? (car content) 'eager)) ; for
reentrancy test 3
(set-box! (unbox promise) (unbox (unbox promise*)))
(set-box! promise* (unbox promise)))
(force promise))))))
Matthias.