<br><div class="gmail_quote">On Fri, Jul 11, 2008 at 6:21 AM, Matthew Flatt &lt;<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Not in general. Aside from `exn:break&#39;, built-in exceptions are raised<br>
in a non-continuable way.<br>
<div class="Ih2E3d"></div></blockquote><div><br>Just curious - what are the main reasons behind the exception design to make them non-continuable by default?&nbsp; Is it due to performance or that continuations shouldn&#39;t be used at low level exceptions?&nbsp; (is contination the basis for flow controls as scheme generally advertises?)<br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">In this specific case, you could adjust the compilation of top-level<br>
variable access by defining `#%top&#39;. Here&#39;s one way:<br>
<br>
&nbsp;&gt; (define (handle-undefined exn)<br>
 &nbsp; &nbsp; (abort-current-continuation<br>
 &nbsp; &nbsp; &nbsp;(default-continuation-prompt-tag)<br>
 &nbsp; &nbsp; &nbsp;(lambda () (letrec ([x x]) x))))<br>
&nbsp;&gt; (require (only-in scheme/base [#%top orig-top]))<br>
&nbsp;&gt; (define-syntax-rule (#%top . id)<br>
 &nbsp; &nbsp;(call-with-continuation-prompt<br>
 &nbsp; &nbsp; (lambda ()<br>
 &nbsp; &nbsp; &nbsp; (call-with-exception-handler<br>
 &nbsp; &nbsp; &nbsp; &nbsp;(orig-top . handle-undefined)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;(lambda () (orig-top . id))))))<br>
&nbsp;&gt; undef<br>
&nbsp;made-up<br>
&nbsp;&gt; (define def 5)<br>
&nbsp;&gt; def<br>
&nbsp;5<br>
<br>
Installing a prompt and exception handler for every top-level lookup is<br>
expensive, though --- about 50 times as expensive as a normal top-level<br>
lookup (when the variable is defined) in my test.<br>
<div class="Ih2E3d"></div></blockquote><div><br>This is an interesting technique - thanks for sharing.&nbsp; The cost is certainly a concern if every lookup pays for it. <br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
That&#39;s not quite the problem. It&#39;s more that the exception handler is<br>
required to escape, and also that the exception for an undefined<br>
variable doesn&#39;t provide a place to escape back to.<font color="#888888"><br></font></blockquote><div><br>So what are the contination-marks used for?&nbsp; I thought they can be used for invoking continuations.&nbsp; The related concepts (prompts, continuation, escape, etc) continues to escape me even with the manual.&nbsp; If there are some links or pointers on how they are all related and used - it&#39;s much appreciated.<br>
<br>Thanks,<br>yc<br><br></div></div>