<div dir="ltr">Hi friends,<div><br></div><div style>I&#39;m working on a macro that expands into a match statement. It looks something like</div><div style><br></div><div style>(define-syntax (my-macro stx)</div><div style>
  (syntax-case stx ()</div><div style>    [(_ (id1 id2 ...) body ...)</div><div style>     (with-syntax ([match-pattern </div><div style>                          (datum-&gt;syntax stx (cons &#39;list (syntax-&gt;datum #&#39;(id1 id2 ...))))])</div>
<div style>     #&#39;(lambda (expr)</div><div style>         (match expr</div><div style>            [match-pattern body ...])))))</div><div style><br></div><div style>So in effect, it expands</div><div style><br></div><div style>
(my-macro (push i) (printf &quot;~v&quot; i)</div><div style><br></div><div style>into</div><div style><br></div><div style>(lambda (expr)</div><div style>  (match expr</div><div style>    [(list push i) (printf &quot;~v&quot; i)]))</div>
<div style><br></div><div style>Here is the problem: I&#39;d like the first entry of the match list to be quoted (e.g. &#39;push) rather than unquoted, as it is above, since &#39;match&#39; will interpret this as a free variable, meaning</div>
<div style><br></div><div style>((my-macro (push i) i) &#39;(dont-push 45)) will evaluate to 45, rather than fail to match (the desired behavior).</div><div style><br></div><div style>Unfortunately, trusty (quote (syntax-&gt;datum stx id1)) and or any variation thereof will do what it&#39;s supposed to: quote whatever expression will evaluate into whatever I want quoted.</div>
<div style><br></div><div style>I could just write the quotes into the expressions using the macro, a la (my-macro (&#39;push i) ...), but Shirly there&#39;s a way around this?</div><div style><br>Any help would be appreciated. Thanks for your time; I&#39;m loving my explorations into Racket ^_^</div>
<div style><br></div><div style>-Paul</div></div>