<p>Just remember that putting a use of call/cc in a context changes the meaning of that use...</p>
<p><blockquote>On Jan 17, 2009 2:22 PM, &quot;Jon Rafkind&quot; &lt;<a href="mailto:rafkind@cs.utah.edu">rafkind@cs.utah.edu</a>&gt; wrote:<br><br><p><font color="#500050">Henk Boom wrote:
&gt;
&gt; 2009/1/17 Jos Koot &lt;<a href="mailto:jos.koot@telefonica.net">jos.koot@telefonica.net</a>&gt;:
&gt; &nbsp;
&gt;&gt;
&gt;&gt; Is that a quation or ju...</font></p>
I think I figured out at least part of it. Hope I don&#39;t spoil it for others..<br>
<br>
(let ([f (call/cc1 call/cc2)])<br>
&nbsp;(printf &quot;f is ~a\n&quot; f)<br>
&nbsp;(f (lambda (x) (printf &quot;x is ~a\n&quot; x))))<br>
<br>
I wrote call/cc1 and call/cc2 to mean call/cc but so I could identify them in the explanation. The result of this prints<br>
<br>
f is #&lt;continuation&gt;<br>
f is #&lt;procedure:/home/jon/tmp/x.ss:17:5&gt;<br>
x is #&lt;procedure:/home/jon/tmp/x.ss:17:5&gt;<br>
<br>
The flow is this: call/cc1 passes its continuation to call/cc2 which invokes the first continuation with the second. So f is now equal to the continuation of call/cc2 and it prints #&lt;continuation&gt; as expected. Now f is invoked with the continuation of call/cc2 with (lambda (x) ...) which starts the computation at (let ([f ...]) ...) so f is now bound to (lambda (x) ...). Printing this results in &lt;procedure&gt;, and then the f [which is now (lambda (x) ...)] is applied to (lambda (x) ...) which prints #&lt;procedure&gt; again.<br>

<br>
So at the end it does ((lambda (x) (printf &quot;x is ~a\n&quot; x)) (lambda (x) (printf &quot;x is ~a\n&quot; x))). Maybe this is obvious to some people but it took me at least 15 minutes to figure out.<p><font color="#500050">
_________________________________________________
&nbsp;For list-related administrative tasks:
&nbsp;<a href="http://l.">http://l.</a>..</font></p></blockquote></p>