Node:Dynamic Wind, Next:Handling Errors, Previous:Error Reporting, Up:Control Mechanisms
[FIXME: this is pasted in from Tom Lord's original guile.texi and should be reviewed]
dynamic-wind in_guard thunk out_guard | Scheme Procedure |
scm_dynamic_wind (in_guard, thunk, out_guard) | C Function |
All three arguments must be 0-argument procedures.
in_guard is called, then thunk, then
out_guard.
If, any time during the execution of thunk, the
continuation of the (define x 'normal-binding) => x (define a-cont (call-with-current-continuation (lambda (escape) (let ((old-x x)) (dynamic-wind ;; in-guard: ;; (lambda () (set! x 'special-binding)) ;; thunk ;; (lambda () (display x) (newline) (call-with-current-continuation escape) (display x) (newline) x) ;; out-guard: ;; (lambda () (set! x old-x))))))) ;; Prints: special-binding ;; Evaluates to: => a-cont x => normal-binding (a-cont #f) ;; Prints: special-binding ;; Evaluates to: => a-cont ;; the value of the (define a-cont...) x => normal-binding a-cont => special-binding |