<div dir="ltr">Does that one do the right thing? I thought it would have been phrased more like...<div><br><div><div><div>(define-syntax (for3 stx)</div><div>&nbsp;&nbsp;(syntax-case stx ()</div><div>&nbsp;&nbsp; &nbsp;((for x in/as y body ...)</div>
<div>&nbsp;&nbsp; &nbsp; (let-values (((element list) (cond&nbsp;</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;((free-identifier=? #&#39;in/as #&#39;in)</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (values #&#39;x #&#39;y))</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;((free-identifier=? #&#39;in/as #&#39;as)</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (values #&#39;y #&#39;x))</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(else (error &#39;for &quot;Invalid syntax&quot;)))))</div><div>&nbsp;&nbsp; &nbsp; &nbsp; #`(map (lambda (#,element) body ...) #,list)))))</div>
<div><br></div><div><br></div></div><div>Anthony</div><div><br></div><br><div class="gmail_quote">On Fri, Sep 12, 2008 at 7:38 PM, Jens Axel Soegaard <span dir="ltr">&lt;<a href="mailto:jensaxel@soegaard.net">jensaxel@soegaard.net</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><a href="mailto:danprager@optusnet.com.au" target="_blank">danprager@optusnet.com.au</a> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
In the reddit comments about the tutorial<br>
<br>
 &nbsp;<a href="http://www.reddit.com/r/programming/comments/710el/a_scheme_syntaxrules_primer/" target="_blank">http://www.reddit.com/r/programming/comments/710el/a_scheme_syntaxrules_primer/</a><br>
<br>
the following refactoring was suggested<br>
<br>
(define-syntax for<br>
 &nbsp;(syntax-rules (in as)<br>
 &nbsp; &nbsp;((for element in list body ...)<br>
 &nbsp; &nbsp; (map (lambda (element)<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;body ...)<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;list))<br>
 &nbsp; &nbsp;((for list as element body ...)<br>
 &nbsp; &nbsp; (for element in list body ...))))<br>
<br>
which does eliminate the template duplication, but repeats the line <br>
 &nbsp;(for element in list body ...)<br>
<br>
first as a pattern, then as a template.<br>
<br>
Can anyone suggest further improvements?<br>
</blockquote>
<br>
(define-syntax (for stx)<br>
&nbsp;(syntax-case stx ()<br>
 &nbsp; [(for element in/as list body ...)<br>
 &nbsp; &nbsp;(or (free-identifier=? #&#39;in/as #&#39;in)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;(free-identifier=? #&#39;in/as #&#39;as))<br>
 &nbsp; &nbsp;#&#39;(map (lambda (element) body ...) list)]))<br><font color="#888888">
<br>
<br>
-- <br>
Jens Axel Søgaard<br>
<br>
<br>
_________________________________________________<br>
&nbsp;For list-related administrative tasks:<br>
&nbsp;<a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>
</font></blockquote></div><br></div></div></div>