<div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Apr 27, 2012 at 14:18, Sam Tobin-Hochstadt <span dir="ltr">&lt;<a href="mailto:samth@ccs.neu.edu" target="_blank">samth@ccs.neu.edu</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Fri, Apr 27, 2012 at 8:03 AM, Laurent &lt;<a href="mailto:laurent.orseau@gmail.com">laurent.orseau@gmail.com</a>&gt; wrote:<br>


&gt; Hi,<br>
&gt;<br>
&gt; I&#39;m trying to match form declarations that can contain optional<br>
&gt; keyword-followed-by-something (more precisely matching &quot;defforms&quot;<br>
&gt; declarations).<br>
&gt; It looks like (id [#:kw1 val1] x [#:kw2 val2] ....) where the [] means<br>
&gt; optional.<br>
&gt; For example the list to match may be &#39;(a b) or &#39;(a #:kw1 1 b) or  &#39;(a b<br>
&gt; #:kw2 2) or &#39;(a #:kw1 3 b #:kw2 4), etc.<br>
&gt;<br>
&gt; But I couldn&#39;t figure out how to say &quot;match 2 things one after the other, 0<br>
&gt; or 1 time&quot;.<br>
&gt; Something like that could do it:<br>
&gt; (match L<br>
&gt;   [`(,id ,@(list &#39;#:kw1 v1) ... ,x ,@(list &#39;#:kw2 v2) ...  ....)<br>
&gt;   ....])<br>
&gt;<br>
&gt; but nothing I tried got close to it (the ... are quoted and don&#39;t like being<br>
&gt; unquoted).<br>
&gt; Google gave me that result:<br>
&gt; <a href="http://stackoverflow.com/questions/7061533/match-form-in-racket-scheme-question-about-matching-sequences" target="_blank">http://stackoverflow.com/questions/7061533/match-form-in-racket-scheme-question-about-matching-sequences</a><br>


&gt; but that&#39;s not really what I&#39;m after.<br>
&gt;<br>
&gt; Is there any way to do that with match patterns without doing some<br>
&gt; recurrence over `match&#39; myself (and not writing all the possible composition<br>
&gt; of with/without each keyword)?<br>
<br>
</div></div>`match&#39; doesn&#39;t support the repetition constraints and other<br>
extensions to ... patterns that `syntax-parse&#39; does.  `list-no-order&#39;<br>
patterns might be helpful here, though.<br></blockquote><div><br>ok, never mind, tanks.<br> </div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

If you&#39;re processing the contents of a `defform&#39; call, probably the<br>
right thing to do is just just use `syntax-parse&#39; -- it&#39;s great for<br>
this sort of thing.<br></blockquote><div><br>Actually, the defforms are read directly from a scribble file, so it&#39;s not a call.<br>Is it possible to have syntax-parse deal directly with values instead of syntax objects?<br>

</div></div>(I suppose I could turn the read list into a syntax object, but that&#39;s probably not the best way to do it, is it?)<br></div>