On Wed, Jan 5, 2011 at 7:40 AM, Keiko Nakata <ke...@kurims.kyoto-u.ac.jp> wrote: > Thanks for the code. > > I'm a bit confused as replacing 'call-with-exception-handler' by > 'with-handlers' seem to not produce the same bahavior: > > (call-with-continuation-prompt > (lambda () > (with-handlers > ([(lambda (_) true) (lambda (_) > (call-with-current-continuation > (lambda (k) (abort-current-continuation t k)) > t))]) > (lambda () (raise 3)))) > t > (lambda (k) > (call-with-continuation-prompt > (lambda () (k 4)) > t))) > > What am I missing? >
A `with-handlers' handler and a `call-with-exception-handler' handler are invoked with different continuations. A `with-handlers' handler is invoked with the continuation of the entire `with-handlers' expression; a `call-with-exception-handler' handler is invoked with the continuation of the `raise' call. In this example, the barrier is gone by the time the `with-handlers' handler runs. I only discovered this subtlety myself about a week ago, but somehow it didn't occur to me that you were missing it until after I sent my message. By the time I made it back to a computer to follow up, you'd already asked the follow up question :) _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users