[gambit-list] with-exception-handler supports recursion?
Mikael
mikael.rcv at gmail.com
Sun Mar 31 20:40:44 EDT 2013
Aaha, noted. So the way to stack exception handlers atop of each others are
by continuation-capture as you gave an example of in the previous email,
here applied to this usecase. Thanks for clarifying!
(with-exception-handler
(lambda (e)
(print "Outer.\n")
'outer-handler-result)
(lambda ()
(continuation-capture
(lambda (cont)
(with-exception-handler
(lambda (e)
(print "Inner.\n")
(let ((r (continuation-graft cont (lambda () (raise e)))))
(print "Passing on " r ".\n")
r))
(lambda () (list 'raise-returned: (raise 'err))))))))
2013/4/1 Marc Feeley <feeley at iro.umontreal.ca>
>
> On 2013-03-31, at 3:02 PM, Mikael <mikael.rcv at gmail.com> wrote:
>
> > Dear Marc,
> >
> > (with-exception-handler
> > (lambda (e)
> > (print "Outer.\n")
> > 'outer-handler-result)
> > (lambda ()
> > (with-exception-handler
> > (lambda (e)
> > (print "Inner.\n")
> > (let ((r (raise e)))
> > (print "Passing on " r ".\n")
> > r))
> > (lambda () (list 'raise-returned: (raise 'err))))))
> >
> > prints out "Inner.\n" in an infinite loop currently. Is it not supposed
> to output
> >
> > Inner.
> > Outer.
> > Passing on outer-handled-result.
> >
> > and then return '(raise-returned: outer-handler-result) ?
>
> That's the correct behavior. Don't confuse with-exception-catcher (which
> corresponds to try/catch in other programming languages) and
> with-exception-handler (which installs an exception handler which will be
> active when the exception handler is called).
>
> Marc
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20130401/b0093983/attachment.htm>
More information about the Gambit-list
mailing list