; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees. See file COPYING. " The correct output looks something like this: wind-1 f: 1 wind-2 f: 2 before-throw-out f: 3 unwind-2 f: 2 unwind-1 f: 1 after-throw-out f: top wind-1 f: 1 wind-2 f: 2 after-throw-in f: 3 unwind-2 f: 2 unwind-1 f: 1 done f: top " (define (wind-test) (let* ((f (make-fluid 'top)) (report (lambda (foo) (write foo) (display " f: ") (write (fluid f)) (newline)))) ((call-with-current-continuation (lambda (k1) (let-fluid f 1 (lambda () (dynamic-wind (lambda () (report 'wind-1)) (lambda () (let-fluid f 2 (lambda () (dynamic-wind (lambda () (report 'wind-2)) (lambda () (let-fluid f 3 (lambda () (report 'before-throw-out) (call-with-current-continuation (lambda (k2) (k1 (lambda () (report 'after-throw-out) (k2 #f))))) (report 'after-throw-in) (lambda () (report 'done))))) (lambda () (report 'unwind-2)))))) (lambda () (report 'unwind-1))))))))))