On Sun, Jun 20, 2021 at 2:59 PM Marc Nieper-Wißkirchen <
xxxxxx@gmail.com> wrote:
"The procedures in this SRFI fully support exceptions, continuable exceptions, first-class continuations, and other forms of non-local control flow. In particular, if multiple returns occur from a higher-order procedure like 'fxmapping-unfold', the values returned by earlier returns are not mutated."
Exceptions, whether continuable or not, do not in themselves constitute non-local flow control and so should not be mentioned here. They are basically just indirect procedure calls, somewhat as follows:
(define *handler-stack* (list outermost-handler))
(define (raise-continuable obj)
(let ((hs *handler-stack*))
(set! *handler-stack* (cdr hs))
((car hs) obj)
(set! *handler-stack* hs))
(define (raise obj)
(raise-continuable obj)
(let loop ()
(raise "attempt to continue a non-continuable exception")))
Exception *handlers* often involve non-local control flow; see the syntax-rules definition of `guard` in R7RS.