<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16587" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff background="">
<DIV><FONT face="Courier New" size=2>The following is extracted and simplified 
as much as possible from a bigger piece of code.</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Sorry that I could not condence it any 
further.<BR><BR>; file lazy.ss 
----------------------------------------<BR>(module lazy 
mzscheme<BR>&nbsp;(provide lazy)<BR>&nbsp;(define module-name (gensym 
'module-name-lazy-))<BR>&nbsp;<BR>&nbsp;(define-syntax lazy<BR>&nbsp; 
(syntax-rules ()<BR>&nbsp;&nbsp; ((lazy expr) (lazy/proc 
'expr))))<BR>&nbsp;<BR>&nbsp;(define (lazy/proc expr)<BR>&nbsp; (let/cc 
cc<BR>&nbsp;&nbsp; </FONT><FONT size=2><FONT face="Courier New"><FONT 
color=#ff0000>(eval<BR>&nbsp;&nbsp;&nbsp; `(module ,module-name 
<BR>&nbsp;&nbsp;&nbsp;&nbsp; "lazy-language.ss"<BR>&nbsp;&nbsp;&nbsp;&nbsp; ,cc 
,expr))</FONT>))<BR>&nbsp;<BR>&nbsp;;&nbsp;inorder to make require 
superfluous<BR>&nbsp;&nbsp;(lazy/proc 'initialize)<BR>&nbsp;&nbsp;(eval 
`(require ',module-name)))</FONT></FONT></DIV>
<DIV><FONT face="Courier New" size=2>&nbsp; ;&nbsp;module name quoted for 
3.99.0.9<BR><BR>; file lazy-language.ss 
---------------------------------<BR>(module lazy-language 
mzscheme<BR>&nbsp;(provide macro scheme</FONT></DIV>
<DIV><FONT face="Courier New" size=2>&nbsp;&nbsp;(rename mod-begin 
#%module-begin)</FONT></DIV>
<DIV><FONT face="Courier New" size=2>&nbsp; (rename #%datum #%top)) ; allow free 
vars<BR>&nbsp;<BR>&nbsp;(define-syntax (macro stx) <BR>&nbsp; (syntax-case stx 
()<BR>&nbsp;&nbsp; ((_ (id keywords rule ...) ... expr)<BR>&nbsp;&nbsp;&nbsp; 
#'(letrec-syntaxes<BR>&nbsp;&nbsp;&nbsp;&nbsp; (((id ...) (#%app values 
(syntax-rules keywords rule ...) ...)))<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
expr))))<BR>&nbsp;<BR>&nbsp;(define-syntax scheme<BR>&nbsp; (syntax-rules 
()<BR>&nbsp;&nbsp; ((_ x) (#%app eval 'x))<BR>&nbsp;&nbsp; ((_ x y ...) (#%app 
(#%app eval 'x) y ...))))<BR><BR>&nbsp;(define-syntax mod-begin<BR>&nbsp; 
(syntax-rules ()<BR>&nbsp;&nbsp; ((_ cont x)<BR>&nbsp;&nbsp;&nbsp; 
(#%module-begin<BR>&nbsp;&nbsp;&nbsp;&nbsp; (#%app (#%datum . cont) 
x))))))<BR><BR>; using the above -------------------------</FONT></DIV>
<DIV><FONT face="Courier New" size=2>; definitions window<BR>(require "lazy.ss" 
)</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(lazy<BR>&nbsp;(macro (a () ((a x y) 
(scheme list x y)))<BR>&nbsp; (a p q))) ; --&gt; (p q) ok</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(lazy<BR>&nbsp;(macro (a () ((a x ...) 
(scheme list x ...)))<BR>&nbsp; (a p q))) ; --&gt; (p q) ok</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>(lazy<BR>&nbsp;(macro (a () ((a x ...) 
(scheme list x ...)))<BR>&nbsp; (a p q r))) ; --&gt; error: a: bad syntax in: (a 
p q r)</FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>Run: interactions-window:</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Welcome to DrScheme, version 
3.99.0.9-svn6jan2008 [3m].<BR>Language: Textual (MzScheme, includes 
R5RS)</FONT></DIV>
<DIV><FONT face="Courier New" size=2>(p q)<BR>(p q)<BR>lazy.ss:12:3: a: bad 
syntax in: (a p q r)</FONT></DIV>
<DIV><FONT face="Courier New" size=2>&gt; </FONT></DIV>
<DIV><FONT face="Courier New" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="Courier New" size=2>This used to work in all earlier versions 
of MzScheme. Now many things have changed, I know. What change do I overlook? It 
seems like in the calls to syntax lazy, the ellipses&nbsp;are taken for a 
common&nbsp;identifier. Any help will be very much appreciated. I already tried 
to parse the rules given to syntax macro, replacing every occurrence of 
identifier '...' by a locally introduced ellipsis, but that did not 
help.</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Jos Koot</FONT></DIV></BODY></HTML>