<div dir="ltr"><br><br><div class="gmail_quote">On Fri, Sep 12, 2008 at 12:18 AM, John Clements <span dir="ltr">&lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="Wj3C7c"><br></div></div>
When you say that &quot;any&quot; is tail recursive, I believe what you actually mean is that a procedure that uses &quot;any&quot; as its result contract can still be tail-calling (or tail recursive, if you prefer). &nbsp;This is because the &quot;any&quot; contract is satisfied by any value, so no check need be performed.<br>

<br>
In other cases, though, you can&#39;t have tail-calling; this is because the contract that you&#39;re specifying requires a check after the return of the procedure that the contract is applied to.<br>
<br>
To be more concrete: &nbsp;suppose you have a function f that&#39;s wrapped with a number? -&gt; number? contract. &nbsp;Calls to f can never be tail calls, because the current continuation must be extended with a check that the result value is a number.<br>

</blockquote><div><br>Thanks for the response. I apologize for my unclear writing. <br><br>What you say makes sense, to me it means that if we care about space efficiency we cannot use anything besides `any` for the result contract, unless we can foresee how the function would be used ahead of time, or have a way to conditionally circumvent contracts.<br>
<br>Thanks,<br>yc<br><br><br><br><br></div></div></div>