GMTA I guess. That was very nice. Thank you both,<br><br>-pp<br><br><div><span class="gmail_quote"><br></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br><br>You can use call-with-values, values, and apply:<br><br>(define (helper thunk)<br>&nbsp;&nbsp;(setup)<br>&nbsp;&nbsp;(call-with-values thunk<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda results<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(teardown)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply values results))))
<br><br>Ryan<br><br>&gt; Here is my attempt:<br>&gt;<br>&gt; (define (helper thunk)<br>&gt;&nbsp;&nbsp; (let ((success #t))<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; (dynamic-wind<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda () (printf &quot;Setup~n&quot;))<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda ()
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (with-handlers (((lambda ex #t)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (exn)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! success #f)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(raise exn))))<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (thunk)))
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda()<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if success<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (printf &quot;Teardown~n&quot;))))))<br>&gt;<br>&gt; &gt; (helper (lambda () (values 1 2 3)))<br>&gt; Setup<br>&gt; Teardown<br>&gt; 1<br>&gt; 2
<br>&gt; 3<br>&gt;<br>&gt; &gt; (helper (lambda () 1))a<br>&gt; Setup<br>&gt; Teardown<br>&gt; 1<br>&gt;<br>&gt; &gt; (helper (lambda () (error &quot;Abort&quot;) (values 1 2 3)))<br>&gt; Setup<br>&gt; &gt; Abort<br>&gt;<br>
&gt; This seems to work, but its ugly. Is there a nicer solution?<br>&gt;<br>&gt; -pp<br>&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; -pp<br>&gt; &gt; _________________________________________________<br>&gt;&nbsp;&nbsp; For list-related administrative tasks:
<br>&gt;&nbsp;&nbsp; <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>&gt;<br><br><br>__________________________________________________<br>Do You Yahoo!?<br>
Tired of spam?&nbsp;&nbsp;Yahoo! Mail has the best spam protection around<br><a href="http://mail.yahoo.com">http://mail.yahoo.com</a><br></blockquote></div><br>