Choice recursive-forcing

The R5RS prescribes a certain behavior for promises that force themselves in their computations. This prescription introduces complexity into the definition of the promise subsystem, so is not universally followed.

This choice is tested for by running

(letrec ((entered? #f)
         (internal-return-value (quote an-unusual-dummy-value))
         (p (delay
              (if entered?
                  'deep-value
                  (begin
                    (set! entered? #t)
                    (set! internal-return-value (force p))
                    'shallow-value)))))
  (let ((external-return-value (force p)))
    (list internal-return-value external-return-value)))

in each Scheme.