<br><br><div class="gmail_quote">On Sat, May 16, 2009 at 4:22 PM, Eli Barzilay <span dir="ltr">&lt;<a href="mailto:eli@barzilay.org">eli@barzilay.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 class="im">On May 16, Todd O&#39;Bryan wrote:<br><br></div><div class="im">&gt; And I&#39;m supposed to rewrite letfuns so that it can handle mutually<br>
&gt; recursive functions. More concretely, I write<br>
&gt;<br>
&gt; (rewrite (letfuns ([(f x) E] ...) B)<br>
&gt;          =&gt; (my-code-here))<br>
&gt;<br>
&gt; so that something like this<br>
&gt;<br>
&gt; (letfuns<br>
&gt;   ([(even? n) (if (= n 0) #t (odd? (- n 1)))]<br>
&gt;    [(odd? n) (if (= n 0 #f (even? (- n 1))))])<br>
&gt;          (even? 123))<br>
&gt;<br>
&gt; would produce the expected answer.<br>
&gt;<br>
<br>
</div>Well, since `f&#39; (for example) is the list of function names, you could<br>
<div class="im">write<br>
<br>
  (rewrite (letfuns ([(f x) E] ...) B)<br>
</div>           =&gt; (list &#39;f ...))<br>
<br>
This will make a `letfuns&#39; expression evaluate to a list of the<br>
function names as symbols.</blockquote><div><br>OK. I think I understand now. I need to combine (list &#39;f ...) (list x ...) and (list E ...) in the correct way, using map.<br><br>I&#39;m having trouble keeping clear which level--syntactic or semantic--and which language--the underlying implementation language or the language I&#39;m interpreting--I&#39;m working in. Which is, I guess, the point. :-)<br>
<br>Todd <br><br> <br></div></div><br>