From: Matthew Flatt <mflatt@cs.utah.edu> To: plt-scheme@list.cs.brown.edu Subject: [plt-scheme] 369.3 Date: Thu, 4 Jan 2007 20:28:23 +0800 MzScheme and MrEd are now version 369.3 in the SVN repository trunk. The changes are mostly bug fixes (especially related to 359.2 changes). One minor change is that a low-level exception handler, as installed with `call-with-exception-handler’, can chain to the "previous" handler by simply returning a value: (raise 10) ; => uncaught exception: 10 (call-with-exception-handler (lambda (exn) (+ exn 3)) (lambda () (raise 10))) ; => uncaught exception: 13 "Previous" means the handler for the continuation starting after the frame associated with the called handler. Beware that `call-with-exception-handler’ calls its thunk argument in tail position, so the handler that looks like it might be "previous" actually gets replaced: (call-with-exception-handler (lambda (exn) (+ exn 30)) (lambda () (call-with-exception-handler (lambda (exn) (+ exn 3)) (lambda () (raise 10))))) ; => uncaught exception: 13 (call-with-exception-handler (lambda (exn) (+ exn 30)) (lambda () (list (call-with-exception-handler (lambda (exn) (+ exn 3)) (lambda () (raise 10)))))) ; => uncaught exception: 43 Meanwhile, with delimited continuations, the previous handler might be a different one than the one available when `call-with-exception-handler’ was evaluated: (define k (call-with-continuation-prompt (lambda () (call-with-exception-handler (lambda (exn) (+ exn 3)) (lambda () ((call-with-composable-continuation (lambda (k) (lambda () k))))))))) (k (lambda () (raise 12))) ; => uncaught exception: 15 (call-with-exception-handler (lambda (exn) (+ exn 2)) (lambda () (list (k (lambda () (raise 12)))))) ; => uncaught exception: 17 Matthew