summaryrefslogtreecommitdiff
path: root/docsrc/xlisp/xlisp-doc/reference/let.htm
blob: 442fecf93cbae2500f7f97ea48f5ce45400f7fbc (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
88
89
90
91
92
93
94
<html><head><title>XLISP let</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>let</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>(let ([<i>binding</i> ... ]) <i>expr</i> ... )</dt>
<dd><i>binding</i> - a variable binding which is one of the forms:
<dl>
<dd><i>symbol</i><br>
(<i>symbol init-expr</i>)
<dl>
<dd><i>symbol</i> - a symbol<br>
<i>init-expr</i> - an initialization expression for <i>symbol</i></dd>
</dl></dd></dl>
<i>expr</i> - an expression<br>
returns - the value of the last expression</dd>
</dl>

<h2>Description</h2>

<p>The 'let' special form is basically a local block construct that contains
symbols [with optional initializations] and a block of code [expressions] to
evaluate. The first form after the 'let' is the 'binding' form. It contains
a series of 'symbols' or 'bindings'. The 'binding' is a 'symbol' followed by
an initialization expression 'init-expr'. If there is no 'init-expr', the
'symbol' will be initialized to <a href="nil.htm">NIL</a>. There
is no specification as to the order of execution of the bindings. The 'let'
form will go through and create and initialize the symbols and then
sequentially execute the 'exprs'. The value of the last 'expr' evaluated is
returned. When the 'let' is finished execution, the 'symbols' that were
defined will no longer exist or retain their values.</p>

<h2>Examples</h2>

<pre class="example">
(let (x y z)                      <font color="#008844">; LET with local vars</font>
  (print x) (print y) (print z))  <font color="#008844">;   prints   NIL NIL NIL</font>

(let ((a 1) (b 2) (c 3))          <font color="#008844">; LET with local vars &amp; init</font>
  (print (+ a b c)))              <font color="#008844">;   prints and returns 6</font>

(let ((a 1) (b 2) (c (+ a b)))    <font color="#008844">; LET with local vars &amp; init</font>
  (print (+ a b c)))              <font color="#008844">;   error: unbound variable - A</font>
</pre>

<p><b>Note:</b> to make the last example work you need the
<a href="let-star.htm">let*</a> special form.</p>

<p>See the
<a href="../manual/xlisp-man-019.htm#let">let</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>