summaryrefslogtreecommitdiff
path: root/docsrc/xlisp/xlisp-doc/reference/flet.htm
blob: aa5cc5dd3781ed1f1663817c6a1f305f58035e00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<html><head><title>XLISP flet</title>

<link rel="stylesheet" type="text/css" href="reference.css">

</head>

<body>

<a href="../start.htm">Nyquist / XLISP 2.0</a>&nbsp; -&nbsp;
<a href="../manual/contents.htm">Contents</a> |
<a href="../tutorials/tutorials.htm">Tutorials</a> |
<a href="../examples/examples.htm">Examples</a> |
<a href="reference-index.htm">Reference</a>

<hr>

<h1>flet</h1>

<hr>

<p><table cellpadding="0" cellspacing="0" style="margin-left:10px"><tbody>
<tr valign="top">
  <td><nobr>Type:</nobr></td>
  <td><nobr>&nbsp;&nbsp;-&nbsp;&nbsp;</nobr></td>
  <td width="100%"><nobr>special form (fsubr)</nobr></td>
</tr>
<tr valign="top">
  <td><nobr>Source:</nobr></td>
  <td><nobr>&nbsp;&nbsp;-&nbsp;&nbsp;</nobr></td>
  <td width="100%"><nobr>xlcont.c</nobr></td>
</tr>
</tbody></table></p>

<h2>Syntax</h2>

<dl>
<dt>(flet ([<i>function</i> ... ]) <i>expr</i> ... )</dt>
<dd><i>function</i> - a function definition binding which is of the form:
<dl><dd>(<i>symbol arg-list body</i>)
<dl><dd><i>symbol</i> - the symbol specifying the function name<br>
<i>arg-list</i> - the argument list for the function <br>
<i>body</i> - the body of the function</dd></dl></dd></dl>
<i>expr</i> - an expression<br>
returns - the value of the last expression</dd>
</dl>

<h2>Description</h2>

<p>The 'flet' special form is basically a local block construct that allows
local 'function' definitions followed by a block of code to evaluate. The
first form after the 'flet' is the 'binding' form. It contains a series of
'functions'. The 'flet' form will go through and define the 'symbols' of the
'functions' and then sequentially execute the 'exprs'. The value of the last
'expr' evaluated is returned. When the 'flet' is finished execution, the
'symbols' that were defined will no longer exist.</p>

<h2>Examples</h2>

<pre class="example">
(flet ((fuzz (x) (+ x x)))  <font color="#008844">; an FLET with FUZZ local function</font>
  (fuzz 2))                 <font color="#008844">; returns 4</font>
                            <font color="#008844">; FUZZ no longer exists</font>

(fuzz 2)                    <font color="#008844">; error: unbound function - FUZZ</font>

                            <font color="#008844">; an empty flet</font>
(flet () (print 'a))        <font color="#008844">; prints A</font>
</pre>

<p><b>Note:</b> 'flet' does not allow recursive definitions of functions.
The <a href="labels.htm">labels</a> special form does allow this.</p>

<p>See the
<a href="../manual/xlisp-man-019.htm#flet">flet</a>
special form in the <nobr>XLISP 2.0</nobr> manual.</p>

<p><nobr>&nbsp;&nbsp;<a href="#top">Back to Top</nobr></a></p>

<hr>

<a href="../start.htm">Nyquist / XLISP 2.0</a>&nbsp; -&nbsp;
<a href="../manual/contents.htm">Contents</a> |
<a href="../tutorials/tutorials.htm">Tutorials</a> |
<a href="../examples/examples.htm">Examples</a> |
<a href="reference-index.htm">Reference</a>

</body></html>