<div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
For example, there&#39;s no reason the pattern (_ (name value) ... expr) could not be made to work, since &#39;expr&#39; is a less specific matcher than &#39;(name value)&#39;. &#39;(name value) ...&#39; would consume input expressions until it hit a non-list expression, then &#39;expr&#39; would take over. So firstly, are there counterexamples to prove this wouldn&#39;t work, and if it would work, can you implement it using Scheme macros themselves? I&#39;d also like to do something similar with keywords, so that for example (_ expr ... stop stmt ...) would work if &#39;stop&#39; is a keyword for the syntax.<br>

</blockquote>
<br></div>
And in fact it already works in PLT Scheme:<br>
<br>
#lang scheme<br>
<br>
(define-syntax foo<br>
 &nbsp;(syntax-rules ()<br>
 &nbsp; &nbsp;[(foo a b ... c)<br>
 &nbsp; &nbsp; &#39;(a b ... c)]))<br>
<br>
(foo 1 2 3) ; =: (1 2 3)<br>
<br>
<br>
(define-syntax bar<br>
 &nbsp;(syntax-rules ()<br>
 &nbsp; &nbsp;[(foo a b ... ignore)<br>
 &nbsp; &nbsp; &#39;(a b ...)]))<br>
<br>
(bar 1 2 3) ; =&gt; (1 2)</blockquote><div><br><br>Okay, I tried that out in mzscheme and it was fine. I ask because I&#39;m implementing R5RS myself, and I was wondering whether it&#39;s possible to implement some of the R6RS additions (like infix ellipses) as R5RS macros. If you have examples that would be great.<br>
<br>I&#39;d also like keywords to be used to stop ellipses consuming input, i.e. the following would be fine:<br><br>(define-syntax foo<br>
 &nbsp;(syntax-rules (word)<br>
 &nbsp; &nbsp;[(foo a b ... word c ...)<br>
 &nbsp; &nbsp; &#39;(a b ... c)]))<br></div></div><br>This would allow very flexible custom syntaxes but mzscheme choked when I tried it. Is it possible to implement this using macros or does the host implementation need to provide explicit support for it?<br>
<br>(Sorry if any of this seems obtuse and impractical, I&#39;m just poking around to improve my understanding.)<br>