The interaction of
letrec with reentrant continuations is
rather nontrivial. Gurus who know more than I assert that R5RS requires
this form to return
0, but not all Schemes follow that
This choice is tested for by running
(let ((cont #f)) (letrec ((x (call-with-current-continuation (lambda (c) (set! cont c) 0))) (y (call-with-current-continuation (lambda (c) (set! cont c) 0)))) (if cont (let ((c cont)) (set! cont #f) (set! x 1) (set! y 1) (c 0)) (+ x y))))
in each Scheme.