Sophie

Sophie

distrib > Fedora > 13 > i386 > media > os > by-pkgid > 52a37fb77746ef557a2ec666070d732e > files > 28

bigloo-doc-3.2b-3.fc12.i686.rpm

<!-- 95% W3C COMPLIANT, 95% CSS FREE, RAW HTML -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
<title>BiglooA ``practical Scheme compiler''User manual for version 3.2bJune 2009</title>
 <style type="text/css">
  <!--
  pre { font-family: monospace }
  tt { font-family: monospace }
  code { font-family: monospace }
  p.flushright { text-align: right }
  p.flushleft { text-align: left }
  span.sc { font-variant: small-caps }
  span.sf { font-family: sans-serif }
  span.skribetitle { font-family: sans-serif; font-weight: bolder; font-size: x-large; }
  span.refscreen { }
  span.refprint { display: none; }
  -->
 </style>
</head>

<body class="chapter" bgcolor="#ffffff">
<table width="100%" class="skribetitle" cellspacing="0" cellpadding="0"><tbody>
<tr><td align="center" bgcolor="#8381de"><div class="skribetitle"><strong><big><big><big>22. Bigloo<br/>A ``practical Scheme compiler''<br/>User manual for version 3.2b<br/>June 2009 -- Macro expansion</big></big></big></strong></div><center>
</center>
</td></tr></tbody></table>
<table cellpadding="3" cellspacing="0" width="100%" class="skribe-margins"><tr>
<td align="left" valign="top" class="skribe-left-margin" width="20%" bgcolor="#dedeff"><div class="skribe-left-margin">
<br/><center id='center30035'
><table width="97%" border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse;" frame="box" rules="none"><tbody>
<tr bgcolor="#8381de"><th id="tc30025" align="center" colspan="1"><font color="#ffffff"><strong id='bold30023'
>main page</strong></font></th></tr>
<tr bgcolor="#ffffff"><td id="tc30032" align="center" colspan="1"><table width="100%" border="0" style="border-collapse: collapse;" frame="void" rules="none"><tbody>
<tr><td id="tc30028" align="left" valign="top" colspan="1"><strong id='bold30027'
>top:</strong></td><td id="tc30029" align="right" valign="top" colspan="1"><a href="bigloo.html#Bigloo-A-``practical-Scheme-compiler''-User-manual-for-version-3.2b-June-2009" class="inbound">Bigloo<br/>A ``practical Scheme compiler''<br/>User manual for version 3.2b<br/>June 2009</a></td></tr>
</tbody></table>
</td></tr>
</tbody></table>
</center>
<br/><br/><center id='center30045'
><table width="97%" border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse;" frame="box" rules="none"><tbody>
<tr bgcolor="#8381de"><th id="tc30039" align="center" colspan="1"><font color="#ffffff"><strong id='bold30037'
>Macro expansion</strong></font></th></tr>
<tr bgcolor="#ffffff"><td id="tc30042" align="center" colspan="1"><table cellspacing="1" cellpadding="1" width="100%" class="toc">
<tbody>
 <tr><td valign="top" align="left">22.1</td><td colspan="4" width="100%"><a href="bigloo-23.html#Expansion-passing-style-macros">Expansion passing style macros</a></td></tr>
 <tr><td valign="top" align="left">22.2</td><td colspan="4" width="100%"><a href="bigloo-23.html#Revised(5)-macro-expansion">Revised(5) macro expansion</a></td></tr>
</tbody>
</table>
</td></tr>
</tbody></table>
</center>
<br/><br/><center id='center30055'
><table width="97%" border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse;" frame="box" rules="none"><tbody>
<tr bgcolor="#8381de"><th id="tc30049" align="center" colspan="1"><font color="#ffffff"><strong id='bold30047'
>Chapters</strong></font></th></tr>
<tr bgcolor="#ffffff"><td id="tc30052" align="center" colspan="1"><table cellspacing="1" cellpadding="1" width="100%" class="toc">
<tbody>
 <tr><td valign="top" align="left"></td><td colspan="4" width="100%"><a href="bigloo-1.html#Acknowledgements">Acknowledgements</a></td></tr>
 <tr><td valign="top" align="left">1</td><td colspan="4" width="100%"><a href="bigloo-2.html#Table-of-contents">Table of contents</a></td></tr>
 <tr><td valign="top" align="left">2</td><td colspan="4" width="100%"><a href="bigloo-3.html#Overview-of-Bigloo">Overview of Bigloo</a></td></tr>
 <tr><td valign="top" align="left">3</td><td colspan="4" width="100%"><a href="bigloo-4.html#Modules">Modules</a></td></tr>
 <tr><td valign="top" align="left">4</td><td colspan="4" width="100%"><a href="bigloo-5.html#Core-Language">Core Language</a></td></tr>
 <tr><td valign="top" align="left">5</td><td colspan="4" width="100%"><a href="bigloo-6.html#DSSSL-support">DSSSL support</a></td></tr>
 <tr><td valign="top" align="left">6</td><td colspan="4" width="100%"><a href="bigloo-7.html#Standard-Library">Standard Library</a></td></tr>
 <tr><td valign="top" align="left">7</td><td colspan="4" width="100%"><a href="bigloo-8.html#Pattern-Matching">Pattern Matching</a></td></tr>
 <tr><td valign="top" align="left">8</td><td colspan="4" width="100%"><a href="bigloo-9.html#Fast-search">Fast search</a></td></tr>
 <tr><td valign="top" align="left">9</td><td colspan="4" width="100%"><a href="bigloo-10.html#Structures-and-Records">Structures and Records</a></td></tr>
 <tr><td valign="top" align="left">10</td><td colspan="4" width="100%"><a href="bigloo-11.html#Object-System">Object System</a></td></tr>
 <tr><td valign="top" align="left">11</td><td colspan="4" width="100%"><a href="bigloo-12.html#Regular-parsing">Regular parsing</a></td></tr>
 <tr><td valign="top" align="left">12</td><td colspan="4" width="100%"><a href="bigloo-13.html#Lalr(1)-parsing">Lalr(1) parsing</a></td></tr>
 <tr><td valign="top" align="left">13</td><td colspan="4" width="100%"><a href="bigloo-14.html#Posix-Regular-Expressions">Posix Regular Expressions</a></td></tr>
 <tr><td valign="top" align="left">14</td><td colspan="4" width="100%"><a href="bigloo-15.html#Command-Line-Parsing">Command Line Parsing</a></td></tr>
 <tr><td valign="top" align="left">15</td><td colspan="4" width="100%"><a href="bigloo-16.html#Cryptography">Cryptography</a></td></tr>
 <tr><td valign="top" align="left">16</td><td colspan="4" width="100%"><a href="bigloo-17.html#Errors-Assertions-and-Traces">Errors, Assertions, and Traces</a></td></tr>
 <tr><td valign="top" align="left">17</td><td colspan="4" width="100%"><a href="bigloo-18.html#Threads">Threads</a></td></tr>
 <tr><td valign="top" align="left">18</td><td colspan="4" width="100%"><a href="bigloo-19.html#Database-library">Database library</a></td></tr>
 <tr><td valign="top" align="left">19</td><td colspan="4" width="100%"><a href="bigloo-20.html#Multimedia-library">Multimedia library</a></td></tr>
 <tr><td valign="top" align="left">20</td><td colspan="4" width="100%"><a href="bigloo-21.html#Mail-library">Mail library</a></td></tr>
 <tr><td valign="top" align="left">21</td><td colspan="4" width="100%"><a href="bigloo-22.html#Eval-and-code-interpretation">Eval and code interpretation</a></td></tr>
 <tr><td valign="top" align="left">22</td><td colspan="4" width="100%"><a href="bigloo-23.html#Macro-expansion">Macro expansion</a></td></tr>
 <tr><td valign="top" align="left">23</td><td colspan="4" width="100%"><a href="bigloo-24.html#Parameters">Parameters</a></td></tr>
 <tr><td valign="top" align="left">24</td><td colspan="4" width="100%"><a href="bigloo-25.html#Explicit-typing">Explicit typing</a></td></tr>
 <tr><td valign="top" align="left">25</td><td colspan="4" width="100%"><a href="bigloo-26.html#The-C-interface">The C interface</a></td></tr>
 <tr><td valign="top" align="left">26</td><td colspan="4" width="100%"><a href="bigloo-27.html#The-Java-interface">The Java interface</a></td></tr>
 <tr><td valign="top" align="left">27</td><td colspan="4" width="100%"><a href="bigloo-28.html#Bigloo-Libraries">Bigloo Libraries</a></td></tr>
 <tr><td valign="top" align="left">28</td><td colspan="4" width="100%"><a href="bigloo-29.html#Extending-the-Runtime-System">Extending the Runtime System</a></td></tr>
 <tr><td valign="top" align="left">29</td><td colspan="4" width="100%"><a href="bigloo-30.html#SRFIs">SRFIs</a></td></tr>
 <tr><td valign="top" align="left">30</td><td colspan="4" width="100%"><a href="bigloo-31.html#Compiler-description">Compiler description</a></td></tr>
 <tr><td valign="top" align="left">31</td><td colspan="4" width="100%"><a href="bigloo-32.html#User-Extensions">User Extensions</a></td></tr>
 <tr><td valign="top" align="left">32</td><td colspan="4" width="100%"><a href="bigloo-33.html#Bigloo-Development-Environment">Bigloo Development Environment</a></td></tr>
 <tr><td valign="top" align="left">33</td><td colspan="4" width="100%"><a href="bigloo-34.html#Global-Index">Global Index</a></td></tr>
 <tr><td valign="top" align="left">34</td><td colspan="4" width="100%"><a href="bigloo-35.html#Library-Index">Library Index</a></td></tr>
 <tr><td valign="top" align="left"></td><td colspan="4" width="100%"><a href="bigloo-36.html#Bibliography">Bibliography</a></td></tr>
</tbody>
</table>
</td></tr>
</tbody></table>
</center>
</div></td>
<td align="left" valign="top" class="skribe-body"><div class="skribe-body">
<a name="Macro-Expansion" class="mark"></a><a name="g22529" class="mark"></a>
Bigloo makes use of two macro expansion system. The one based on the
expansion passing style [Dybvig et al. 86] and the one advocated
by the R5RS, for which see <a href="http://www.inria.fr/mimosa/fp/Bigloo/doc/r5rs.html">http://www.inria.fr/mimosa/fp/Bigloo/doc/r5rs.html</a>.<br/><br/><!-- Expansion passing style macros -->
<a name="Expansion-passing-style-macros"></a>
<div class="section-atitle"><table width="100%"><tr><td bgcolor="#dedeff"><h3><font color="black">22.1 Expansion passing style macros</font>
</h3></td></tr></table>
</div><div class="section">
<a name="g22532" class="mark"></a><table cellspacing="0" class="frame" cellpadding="10" border="1" width="100%"><tbody>
<tr><td><a name="g22535" class="mark"></a><a name="define-expander" class="mark"></a><table width="100%" style="border-collapse: collapse;" frame="void" rules="none"><tbody>
<tr><td id="tc22539" align="left" colspan="1"><strong id='bold22537'
>define-expander</strong><em id='it22538'
> name proc</em></td><td id="tc22540" align="right" colspan="1">bigloo syntax</td></tr>
</tbody></table>
This form defines an expander, <code id='code22544'
><em id='it22543'
>name</em></code>, where <code id='code22546'
><em id='it22545'
>proc</em></code>
is a procedure of two arguments: a form to macro-expand,
and an expander.
</td></tr>
</tbody></table><br/>
<table cellspacing="0" class="frame" cellpadding="10" border="1" width="100%"><tbody>
<tr><td><a name="g22550" class="mark"></a><a name="define-macro" class="mark"></a><table width="100%" style="border-collapse: collapse;" frame="void" rules="none"><tbody>
<tr><td id="tc22554" align="left" colspan="1"><strong id='bold22552'
>define-macro</strong><em id='it22553'
> (name [args]...) body</em></td><td id="tc22555" align="right" colspan="1">bigloo syntax</td></tr>
</tbody></table>
This form is itself macro-expanded into a <code id='code22558'
>define-expander</code> form.<br/><br/>Macro expanders cannot be exported or imported since there is no way
to specify expanders in a module declaration.<br/><br/>Macros defined with <code id='code22561'
>define-expander</code> and <code id='code22562'
>define-macro</code>
are used by both the compiler and the interpreter.
</td></tr>
</tbody></table><br/>
Here is an example of an expander:
<center id='center22578'
><table cellspacing="0" class="color" cellpadding="0" width="95%"><tbody>
<tr><td bgcolor="#ffffcc"><pre class="prog" id='prog22576'
>(<font color="#6959cf"><strong id='bold30056'
>define-expander</strong></font> <font color="#6959cf"><strong id='bold30058'
>when</strong></font> 
   (<strong id='bold30060'
>lambda</strong> (x e)
      (<strong id='bold30061'
>match-case</strong> x
         ((?- ?test . ?exps)
          (e `(<strong id='bold30062'
>if</strong> ,test (<strong id='bold30063'
>begin</strong> ,&#x40;exps)) e))
         (else
           (<font color="red"><strong id='bold30064'
>error</strong></font> <font color="red">&quot;when&quot;</font> <font color="red">&quot;illegal form&quot;</font> x)))))<br/><br/>(when (&gt; a 0) (print a) a)
   ==&gt; (<strong id='bold30068'
>if</strong> (&gt; a 0) (<strong id='bold30069'
>begin</strong> (print a) a))
</pre>
</td></tr>
</tbody></table></center>

The same example can written with a <code id='code22579'
>define-macro</code> form:
<center id='center22585'
><table cellspacing="0" class="color" cellpadding="0" width="95%"><tbody>
<tr><td bgcolor="#ffffcc"><pre class="prog" id='prog22583'
>(<font color="#6959cf"><strong id='bold30070'
>define-macro</strong></font> (<font color="#6959cf"><strong id='bold30072'
>when</strong></font> test . exps)
   `(<strong id='bold30074'
>if</strong> ,test (<strong id='bold30075'
>begin</strong> ,&#x40;exps)))
</pre>
</td></tr>
</tbody></table></center>

</div><br>
<!-- Revised(5) macro expansion -->
<a name="Revised(5)-macro-expansion"></a>
<div class="section-atitle"><table width="100%"><tr><td bgcolor="#dedeff"><h3><font color="black">22.2 Revised(5) macro expansion</font>
</h3></td></tr></table>
</div><div class="section">
<a name="g22586" class="mark"></a>Bigloo support the Revised(5) Report on the Scheme programming language.
For a detailed documentation see See <a href="./r5rs-7.html#Expressions">r5rs, Expressions</a>.<br/><br/><table cellspacing="0" class="frame" cellpadding="10" border="1" width="100%"><tbody>
<tr><td><a name="g22590" class="mark"></a><a name="let-syntax" class="mark"></a><table width="100%" style="border-collapse: collapse;" frame="void" rules="none"><tbody>
<tr><td id="tc22594" align="left" colspan="1"><strong id='bold22592'
>let-syntax</strong><em id='it22593'
> (binding...) body</em></td><td id="tc22595" align="right" colspan="1">syntax</td></tr>
</tbody></table>
<a name="g22599" class="mark"></a><a name="letrec-syntax" class="mark"></a><table width="100%" style="border-collapse: collapse;" frame="void" rules="none"><tbody>
<tr><td id="tc22603" align="left" colspan="1"><strong id='bold22601'
>letrec-syntax</strong><em id='it22602'
> (binding...) body</em></td><td id="tc22604" align="right" colspan="1">syntax</td></tr>
</tbody></table>
<a name="g22608" class="mark"></a><a name="define-syntax" class="mark"></a><table width="100%" style="border-collapse: collapse;" frame="void" rules="none"><tbody>
<tr><td id="tc22612" align="left" colspan="1"><strong id='bold22610'
>define-syntax</strong><em id='it22611'
> keyword transformer</em></td><td id="tc22613" align="right" colspan="1">syntax</td></tr>
</tbody></table>
<a name="g22617" class="mark"></a><a name="syntax-rules" class="mark"></a><table width="100%" style="border-collapse: collapse;" frame="void" rules="none"><tbody>
<tr><td id="tc22621" align="left" colspan="1"><strong id='bold22619'
>syntax-rules</strong><em id='it22620'
> literals rule...</em></td><td id="tc22622" align="right" colspan="1">syntax</td></tr>
</tbody></table>
These three forms are compatible with the description of the
Revised(5) Report on the Algorithmic Language Scheme.<br/><br/>Implementation Note: Current Bigloo does not ensure hygiene for
<code id='code22626'
>let-syntax</code> and <code id='code22627'
>letrec-syntax</code>. Hygienic expansion is
only guaranteed for <code id='code22628'
>define-syntax</code>.
</td></tr>
</tbody></table><br/><br/><br/><br/><br/><br/><br/>

</div><br>
</div></td>
</tr></table><div class="skribe-ending">
<hr> 
<p class="ending" id='paragraph30081'
><font size="-1">
This <span class="sc">Html</span> page has been produced by 
<a href="http://www.inria.fr/mimosa/fp/Skribe" class="http">Skribe</a>.
<br/>
Last update <em id='it30079'
>Tue Jun  2 11:43:27 2009</em>.</font></p></div>
</body>
</html>