<html>
<body>
<font size=3><br>
Never mind, I figured it out.&nbsp; The macro should have been:<br><br>
(define-syntax m4<br>
&nbsp; (lambda (x)<br>
&nbsp;&nbsp;&nbsp; (syntax-case x ()<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab> ((_ v)<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>&nbsp;
(with-syntax ((name (datum-&gt;syntax-object (syntax v)
(string-&gt;symbol (string-append (symbol-&gt;string
(syntax-object-&gt;datum (syntax v))) &quot;:g&quot;)))))<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax (begin<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab> (define name
'())<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab> (define v
'()))))))))<br><br>
I figured it out by using Chez Scheme.&nbsp; It gave me a meaningful
message<br>
with the wrong macro.&nbsp; MzScheme lets it run and hints that it's
right.<br><br>
I can't hardly imagine making it any more complicated.&nbsp; The
simplest<br>
things are made rocket science with define-syntax and friends.&nbsp;
Lisp<br>
macros may not be perfect but normal people (those who don't devote<br>
their life to understanding the intricacies of syntax-case) can use<br>
and understand it.&nbsp; Syntax-case is killing scheme.<br><br>
Blake McBride<br><br>
<br><br>
At 09:06 AM 9/9/2006, Blake McBride wrote:<br><br>
<blockquote type=cite class=cite cite="">Greetings,<br><br>
I am attempting to create a macro using define-syntax, syntax-case
and<br>
with-syntax under MzScheme 352.&nbsp; I believe my macro definition
is<br>
correct but it just doesn't work under MzScheme.&nbsp; The reason I
believe<br>
my macro definition is correct is because when I cause the macro to<br>
quote it's output (to prevent evaluation) it returns the correct<br>
expression.&nbsp; When I try the expression outside the macro system
it<br>
works.<br><br>
The following example and corresponding macro are simplified
versions<br>
of what I am actually doing but does demonstrate the problem.<br>
Here is the example:<br><br>
Input is:<br><br>
(m4 gen)<br><br>
Expected code to be executes is:<br><br>
(begin<br>
&nbsp;&nbsp; (define&nbsp; gen:g&nbsp; '())<br>
&nbsp;&nbsp; (define&nbsp; gen&nbsp;&nbsp;&nbsp; '()))<br><br>
So, I should end up with two variables being defined.&nbsp; The
macro<br>
generates the correct code, but when it is run gen gets defined but<br>
gen:g does not.&nbsp; If I execute the above code manually, it
works.&nbsp; Why<br>
doesn't it work through the macro?<br><br>
The macro is:<br><br>
(define-syntax m4<br>
&nbsp; (lambda (x)<br>
&nbsp;&nbsp;&nbsp; (syntax-case x ()<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>((_ v)<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>&nbsp;
(with-syntax ((name (string-&gt;symbol (string-append (symbol-&gt;string
(syntax-object-&gt;datum (syntax v))) &quot;:g&quot;))))<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (syntax (begin<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>(define name
'())<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab><x-tab>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</x-tab>(define v
'()))))))))<br><br>
Thanks.<br>
Blake McBride<br>
</font></blockquote></body>
</html>