<!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.2900.2180" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Hi,</FONT></DIV>
<DIV><FONT face=Arial size=2>In section 12.6.1&nbsp;&nbsp;"Expanding Expressions 
to Primitive Syntax" of the fine "PLT Mzscheme Language Manual" the possible 
shapes of fully expanded expressions are shown. The display does not account for 
the lifting of&nbsp; expressions within nested begin forms. Can I safely assume 
the following?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>fully-expanded-expr is top-level-expr</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>top-level-expr is one of<BR>&nbsp; 
general-top-level-expr<BR>&nbsp; (#%expression expr)<BR>&nbsp; (module 
identifier name (#%plain-module-begin module-level-expr* ···)) &lt;=== see 
below<BR>&nbsp; (begin top-level-expr ···)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>module-level-expr is one of<BR>&nbsp; 
general-top-level-expr<BR>&nbsp; (provide provide-spec ...)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>general-top-level-expr is one of<BR>&nbsp; 
expr<BR>&nbsp; (define-values (variable ···) expr)<BR>&nbsp; (define-syntaxes 
(identifier ···) expr)<BR>&nbsp; (define-values-for-syntax (variable ···) 
expr)<BR>&nbsp; (require require-spec ···)<BR>&nbsp; (require-for-syntax 
require-spec ···)<BR>&nbsp; (require-for-template require-spec ···)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>expr is one of<BR>&nbsp; variable<BR>&nbsp; (lambda 
formals expr* ···1) &lt;=== see below<BR>&nbsp; (case-lambda (formals expr* 
···1) ···) &lt;=== see below<BR>&nbsp; (if expr expr)<BR>&nbsp; (if expr expr 
expr)<BR>&nbsp; (begin expr* ···1)<BR>&nbsp; (begin0 expr expr* ···) &lt;=== see 
below<BR>&nbsp; (let-values (((variable ···) expr) ···) expr* ···1) &lt;=== see 
below<BR>&nbsp; (letrec-values (((variable ···) expr) ···) expr* ···1) &lt;=== 
see below<BR>&nbsp; (set! variable expr)<BR>&nbsp; (quote datum)<BR>&nbsp; 
(quote-syntax datum)<BR>&nbsp; (with-continuation-mark expr expr expr)<BR>&nbsp; 
(#%app expr ···1)<BR>&nbsp; (#%datum . datum)<BR>&nbsp; (#%top . 
variable)<BR>&nbsp; (#%variable-reference variable)<BR>&nbsp; 
(#%variable-reference (#%top . variable))<BR>&nbsp; <BR>top-level-expr* is any 
top-level-expr except (begin any ...)<BR>module-level-expr* is any 
module-level-expr except (begin any ...)<BR>expr* is any expr except (begin any 
...)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>The word 'except' is not nice,&nbsp;but without it, 
the description becomes unnecesary complicated/duplicated, I think.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Kind regards, Jos Koot</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV></BODY></HTML>