<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <title>edelib: Scheme interpreter</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">edelib  <span id="projectnumber">2.0.0</span> </div> </td> </tr> </tbody> </table> </div> <!-- Generated by Doxygen 1.7.6.1 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> </div> <div class="header"> <div class="summary"> <a href="#define-members">Defines</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">Scheme interpreter</div> </div> </div><!--header--> <div class="contents"> <table class="memberdecls"> <tr><td colspan="2"><h2><a name="define-members"></a> Defines</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga8ac96df41766b3d2e3a8cf24650b780d">edelib_scheme_init_raw</a>   scheme_init_new</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga6a6998e98c566466519bc21e9c5adfd7">edelib_scheme_deinit</a>   scheme_deinit</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga25575558e2f197319ccb7eab3edd9e30">edelib_scheme_load_file</a>   scheme_load_file</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga5d3d56c8b646ecb82f3ad459cadeee76">edelib_scheme_load_string</a>   scheme_load_string</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gac967923d8455f3a9a57bcdd74add789e">edelib_scheme_set_external_data</a>   scheme_set_external_data</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gae419764bce5ba4ac915c2df084202334">edelib_scheme_get_external_data</a>(sc)   (sc)->ext_data</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga343d31f2d64147a36d5ff372526d777e">edelib_scheme_define</a>   scheme_define</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga75a1af941638f83db7dbf724234afa0e">edelib_scheme_call</a>   scheme_call</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gaf2261ee5566dbc81aed08e9ced1e2dc5">edelib_scheme_set_input_port_file</a>   scheme_set_input_port_file</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gad6f90747aad3a644976ebeee64a3e10a">edelib_scheme_set_output_port_file</a>   scheme_set_output_port_file</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gac49c7cf6069b6c6d8bd0636fe9b90480">edelib_scheme_set_input_port_string</a>   scheme_set_input_port_string</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga65c228429c3e02bff96db30226d1447b">edelib_scheme_set_output_port_string</a>   scheme_set_output_port_string</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga8d41e4f5ff2b84fd37369c1deca0a472">EDELIB_SCHEME_DEFINE</a>(sc, func_ptr, func_name)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gaade059b8f78f5125faeef464bf35ac54">EDELIB_SCHEME_DEFINE2</a>(sc, func_ptr, func_name, doc)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#gad9eb194a7959efa61fa6131963cdbadd">EDELIB_SCHEME_IS_NIL</a>(sc, var)   ((var) == sc->NIL)</td></tr> <tr><td colspan="2"><h2><a name="func-members"></a> Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">scheme * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__scheme.html#ga6499e0c4ad67fe153645988e50b3ee1e">edelib_scheme_init</a> (void)</td></tr> </table> <hr/><a name="details" id="details"></a><h2>Detailed Description</h2> <p>This code provides Scheme interpreter and implements most of R5RS specification. The backend is based on <a href="http://tinyscheme.sourceforge.net">tinyscheme</a>.</p> <p>If you are not familiar with Scheme, you can find numerous tutorials online about this language. Here are two, quite suitable for begginers:</p> <ul> <li><a href="http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html">Teach Yourself Scheme in Fixnum Days</a></li> <li><a href="http://www.shido.info/lisp/idx_scm_e.html">Yet Another Scheme Tutorial</a></li> </ul> <p>To initialize interpreter you start with <em>edelib_scheme_init</em> or <em>edelib_scheme_init_raw</em>, which will return interpreter object. As interpreter does not use any global state, you can safely run multiple interpreter instances in different threads.</p> <dl class="todo"><dt><b><a class="el" href="todo.html#_todo000024">Todo:</a></b></dt><dd>Complete docs. </dd></dl> <hr/><h2>Define Documentation</h2> <a class="anchor" id="ga75a1af941638f83db7dbf724234afa0e"></a><!-- doxytag: member="Scheme.h::edelib_scheme_call" ref="ga75a1af941638f83db7dbf724234afa0e" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#ga75a1af941638f83db7dbf724234afa0e">edelib_scheme_call</a>   scheme_call</td> </tr> </table> </div> <div class="memdoc"> <p>Calls scheme function. </p> </div> </div> <a class="anchor" id="ga343d31f2d64147a36d5ff372526d777e"></a><!-- doxytag: member="Scheme.h::edelib_scheme_define" ref="ga343d31f2d64147a36d5ff372526d777e" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#ga343d31f2d64147a36d5ff372526d777e">edelib_scheme_define</a>   scheme_define</td> </tr> </table> </div> <div class="memdoc"> <p>Defines a new function. You shoud use EDELIB_SCHEME_DEFINE or EDELIB_SCHEME_DEFINE2 instead. </p> </div> </div> <a class="anchor" id="ga8d41e4f5ff2b84fd37369c1deca0a472"></a><!-- doxytag: member="Scheme.h::EDELIB_SCHEME_DEFINE" ref="ga8d41e4f5ff2b84fd37369c1deca0a472" args="(sc, func_ptr, func_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#ga8d41e4f5ff2b84fd37369c1deca0a472">EDELIB_SCHEME_DEFINE</a></td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">sc, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">func_ptr, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">func_name </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">sc->vptr->scheme_define(sc, sc->global_env, \ sc->vptr->mk_symbol(sc, func_name), \ sc->vptr->mk_foreign_func(sc, func_ptr)) </pre></div><p>Define new scheme function. </p> </div> </div> <a class="anchor" id="gaade059b8f78f5125faeef464bf35ac54"></a><!-- doxytag: member="Scheme.h::EDELIB_SCHEME_DEFINE2" ref="gaade059b8f78f5125faeef464bf35ac54" args="(sc, func_ptr, func_name, doc)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#gaade059b8f78f5125faeef464bf35ac54">EDELIB_SCHEME_DEFINE2</a></td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">sc, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">func_ptr, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">func_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">doc </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \ scheme_load_string(sc, <span class="stringliteral">"(add-doc "</span> #func_name <span class="stringliteral">","</span> #doc <span class="stringliteral">")"</span>); \ EDELIB_SCHEME_DEFINE(sc, func_name, func_ptr); \ } <span class="keywordflow">while</span>(0) </pre></div><p>Define new scheme function with documentation. </p> </div> </div> <a class="anchor" id="ga6a6998e98c566466519bc21e9c5adfd7"></a><!-- doxytag: member="Scheme.h::edelib_scheme_deinit" ref="ga6a6998e98c566466519bc21e9c5adfd7" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#ga6a6998e98c566466519bc21e9c5adfd7">edelib_scheme_deinit</a>   scheme_deinit</td> </tr> </table> </div> <div class="memdoc"> <p>Deinitialize and clear scheme interpeter object. </p> </div> </div> <a class="anchor" id="gae419764bce5ba4ac915c2df084202334"></a><!-- doxytag: member="Scheme.h::edelib_scheme_get_external_data" ref="gae419764bce5ba4ac915c2df084202334" args="(sc)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#gae419764bce5ba4ac915c2df084202334">edelib_scheme_get_external_data</a></td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">sc</td><td>)</td> <td>   (sc)->ext_data</td> </tr> </table> </div> <div class="memdoc"> <p>Get data set with <em>edelib_scheme_set_external_data</em>. </p> </div> </div> <a class="anchor" id="ga8ac96df41766b3d2e3a8cf24650b780d"></a><!-- doxytag: member="Scheme.h::edelib_scheme_init_raw" ref="ga8ac96df41766b3d2e3a8cf24650b780d" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#ga8ac96df41766b3d2e3a8cf24650b780d">edelib_scheme_init_raw</a>   scheme_init_new</td> </tr> </table> </div> <div class="memdoc"> <p>Initialize scheme interpeter, but will not load any code. Useful for explicitly loading desired bootstrap code. </p> </div> </div> <a class="anchor" id="gad9eb194a7959efa61fa6131963cdbadd"></a><!-- doxytag: member="Scheme.h::EDELIB_SCHEME_IS_NIL" ref="gad9eb194a7959efa61fa6131963cdbadd" args="(sc, var)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#gad9eb194a7959efa61fa6131963cdbadd">EDELIB_SCHEME_IS_NIL</a></td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">sc, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">var </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   ((var) == sc->NIL)</td> </tr> </table> </div> <div class="memdoc"> <p>Macro for checking if given variable nil (NULL in scheme parlance). </p> </div> </div> <a class="anchor" id="ga25575558e2f197319ccb7eab3edd9e30"></a><!-- doxytag: member="Scheme.h::edelib_scheme_load_file" ref="ga25575558e2f197319ccb7eab3edd9e30" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#ga25575558e2f197319ccb7eab3edd9e30">edelib_scheme_load_file</a>   scheme_load_file</td> </tr> </table> </div> <div class="memdoc"> <p>Load scheme source from file. </p> </div> </div> <a class="anchor" id="ga5d3d56c8b646ecb82f3ad459cadeee76"></a><!-- doxytag: member="Scheme.h::edelib_scheme_load_string" ref="ga5d3d56c8b646ecb82f3ad459cadeee76" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#ga5d3d56c8b646ecb82f3ad459cadeee76">edelib_scheme_load_string</a>   scheme_load_string</td> </tr> </table> </div> <div class="memdoc"> <p>Load scheme source from string. </p> </div> </div> <a class="anchor" id="gac967923d8455f3a9a57bcdd74add789e"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_external_data" ref="gac967923d8455f3a9a57bcdd74add789e" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#gac967923d8455f3a9a57bcdd74add789e">edelib_scheme_set_external_data</a>   scheme_set_external_data</td> </tr> </table> </div> <div class="memdoc"> <p>Set additional data (pointer) accessible from scheme function. You can get data with <em>edelib_scheme_get_external_data</em> </p> </div> </div> <a class="anchor" id="gaf2261ee5566dbc81aed08e9ced1e2dc5"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_input_port_file" ref="gaf2261ee5566dbc81aed08e9ced1e2dc5" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#gaf2261ee5566dbc81aed08e9ced1e2dc5">edelib_scheme_set_input_port_file</a>   scheme_set_input_port_file</td> </tr> </table> </div> <div class="memdoc"> <p>Set FILE object as input port. </p> </div> </div> <a class="anchor" id="gac49c7cf6069b6c6d8bd0636fe9b90480"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_input_port_string" ref="gac49c7cf6069b6c6d8bd0636fe9b90480" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#gac49c7cf6069b6c6d8bd0636fe9b90480">edelib_scheme_set_input_port_string</a>   scheme_set_input_port_string</td> </tr> </table> </div> <div class="memdoc"> <p>Set character array as input port. You should give pointer to the first element and pointer to the last. </p> </div> </div> <a class="anchor" id="gad6f90747aad3a644976ebeee64a3e10a"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_output_port_file" ref="gad6f90747aad3a644976ebeee64a3e10a" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#gad6f90747aad3a644976ebeee64a3e10a">edelib_scheme_set_output_port_file</a>   scheme_set_output_port_file</td> </tr> </table> </div> <div class="memdoc"> <p>Set FILE object as output port. </p> </div> </div> <a class="anchor" id="ga65c228429c3e02bff96db30226d1447b"></a><!-- doxytag: member="Scheme.h::edelib_scheme_set_output_port_string" ref="ga65c228429c3e02bff96db30226d1447b" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define <a class="el" href="group__scheme.html#ga65c228429c3e02bff96db30226d1447b">edelib_scheme_set_output_port_string</a>   scheme_set_output_port_string</td> </tr> </table> </div> <div class="memdoc"> <p>Set character array as output port. You should give pointer to the first element and pointer to the last. </p> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="ga6499e0c4ad67fe153645988e50b3ee1e"></a><!-- doxytag: member="Scheme.h::edelib_scheme_init" ref="ga6499e0c4ad67fe153645988e50b3ee1e" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">scheme* <a class="el" href="group__scheme.html#ga6499e0c4ad67fe153645988e50b3ee1e">edelib_scheme_init</a> </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Initialize scheme interpreter and returns scheme object. By default, it will try to search bootstrap files in builtin path (depends on <em>--prefix</em> when <b>configure</b> script was run). This can be overridden by setting <em>EDELIB_SCHEME_INIT</em> environment variable with explicitly given bootstrap files and their absolute path. The paths should be separated with <b>:</b> (just as PATH), e.g. <em>path/init.ss:path/init-2.ss:/path/other.ss</em>. </p> </div> </div> </div><!-- contents --> <hr class="footer"/><address class="footer"><small> Generated on Tue Jun 5 2012 17:49:02 for edelib by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.7.6.1 </small></address> </body> </html>