Hi Jens - <br><br>thanks for the great explanation about how Scheme works in general, as well as the link (I&#39;m reading through right now).&nbsp; I would assume that using closure as compound value object is one of the perceived uses that have been thought of and that a good compiler would put some work toward making sure it can efficiently support the uses, but I also understand that completely depends on the implementation.
<br><br>While it&#39;s unclear for me what model PLT Scheme uses for structs - Robby alluded to that closures is only a constant factor over struct from memory consumption. <br><br>If there is indeed an upper bound somewhere for closure objects that would be good to know too ;) 
<br><br>Thanks,<br>yinso <br><br><div><span class="gmail_quote">On 5/31/07, <b class="gmail_sendername">Jens Axel Søgaard</b> &lt;<a href="mailto:jensaxel@soegaard.net">jensaxel@soegaard.net</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
YC wrote:<br><br>&gt; I&#39;ve heard that Scheme<br>&gt; doesn&#39;t keep variables on the stack, but want to verify.<br><br>The explanation is a little involved. First the<br>concept of call stack. Consider:<br><br>&nbsp;&nbsp; (define (f x) (g (+ x 1))
<br>&nbsp;&nbsp; (define (g y) (h (+ y 2))<br>&nbsp;&nbsp; (define (h z) (+ x 3))<br>&nbsp;&nbsp; (f 0)<br><br>Conceptually f calls g, which calls h. So we have<br>a stack of functions calls here. In most languages<br>the conceptually call stack is implemented as an
<br>actual stack.<br><br>That strategy can&#39;t be used naïvely with Scheme.<br>due to call-with-current-continuation. The<br>problem is that call/cc allows a function to<br>return more than once - and thus conceptually<br>
you get a call *tree* instead of a call stack.<br><br>In a simple Scheme implementations the tree is<br>represented as (you guessed it) a tree stored<br>in the normal garbage collected heap.<br><br>However it is possible to use a stack to store the
<br>current branch of the call tree and then do<br>some trickery when control transfers to another<br>branch [actually a little trickery is needed prior<br>to this too].<br><br>In short, you can&#39;t say &quot;Scheme doesn&#39;t keep variables
<br>on the stack&quot; because some implementations do and<br>others don&#39;t-<br><br>The canonical [I believe] reference is:<br><br>&nbsp;&nbsp; &quot;Three Implementation Models for Scheme&quot;<br>&nbsp;&nbsp; by R. Kent Dybvig.<br><br>It is very well-written and explains everything
<br>in detail. See especially chapter 3 and 4.<br><br>--<br>Jens Axel Søgaard<br><br>_________________________________________________<br>&nbsp;&nbsp;For list-related administrative tasks:<br>&nbsp;&nbsp;<a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">
http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br></blockquote></div><br>