Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > bd5c3d824c3db63ffd9226c15941e6ad > files > 152

mozart-1.4.0-1mdv2010.0.i586.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>11 Infix Notations</TITLE><LINK href="ozdoc.css" rel="stylesheet" type="text/css"></HEAD><BODY><TABLE align="center" border="0" cellpadding="6" cellspacing="6" class="nav"><TR bgcolor="#DDDDDD"><TD><A href="node12.html#chapter.control">&lt;&lt; Prev</A></TD><TD><A href="index.html">- Up -</A></TD><TD><A href="node15.html#chapter.misc">Next &gt;&gt;</A></TD></TR></TABLE><DIV id="chapter.infix"><H1><A name="chapter.infix">11 Infix Notations</A></H1><P> Oz supports infix and prefix notation for very common procedures (see <A href="../notation/node3.html#section.context-free.operators">Section&nbsp;3.5 of ``The Oz Notation''</A>). </P><P> In the following table, we give the prefix and infix notations and the corresponding expansions. The operators are grouped together according to their precedence. Members of the same group have the same precedence, groups further up have lower precedence than groups further down. ``Having higher precedence'' means ``binding tighter''; e.&nbsp;g., the term <CODE>X<SPAN class="keyword">.</SPAN>Y&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Z</CODE> is equal to <CODE>(X<SPAN class="keyword">.</SPAN>Y)&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Z</CODE>. Ambiguities within each group are resolved by the associativity given before each group (e.&nbsp;g., <CODE>X&nbsp;<SPAN class="keyword">-</SPAN>&nbsp;Y&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Z</CODE> is equivalent to <CODE>(X&nbsp;<SPAN class="keyword">-</SPAN>&nbsp;Y)&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;Z</CODE>). </P><TABLE align="center" bgcolor="#f0f0e0"><TR valign="top"><TH><P>Infix</P></TH><TH><P>Normal</P></TH></TR><TR valign="top"><TD colspan="2"><P>right-associative</P></TD></TR><TR valign="top"><TD><P><CODE><I>X</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE><I>Y</I></CODE></P></TD><TD><P><CODE>{Value<SPAN class="keyword">.</SPAN><SPAN class="string">'='</SPAN>&nbsp;</CODE><CODE><I>X</I></CODE><CODE>&nbsp;</CODE><CODE><I>Y</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD colspan="2"><P>right-associative</P></TD></TR><TR valign="top"><TD><P><CODE>+<I>X</I></CODE><CODE>&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;</CODE><CODE><I>Y</I></CODE></P></TD><TD><P>Cell, Attribute, Dictionary or Array element assignment</P></TD></TR><TR valign="top"><TD><P><CODE><I>Z</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>X</I></CODE><CODE>&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;</CODE><CODE><I>Y</I></CODE></P></TD><TD><P>Cell, Attribute, Dictionary or Array element exchange</P></TD></TR><TR valign="top"><TD><P><CODE>+<I>C</I></CODE><CODE><SPAN class="keyword">.</SPAN></CODE><CODE>+<I>LI</I></CODE><CODE>&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;</CODE><CODE><I>X</I></CODE></P></TD><TD><P>Dictionary or Array element assignment</P></TD></TR><TR valign="top"><TD><P><CODE><I>Y</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>C</I></CODE><CODE><SPAN class="keyword">.</SPAN></CODE><CODE>+<I>LI</I></CODE><CODE>&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;</CODE><CODE><I>X</I></CODE></P></TD><TD><P>Dictionary or Array element exchange</P></TD></TR><TR valign="top"><TD><P><CODE>+<I>LI</I></CODE><CODE>&nbsp;<SPAN class="keyword">&lt;-</SPAN>&nbsp;</CODE><CODE><I>X</I></CODE></P></TD><TD><P><CODE>{Object<SPAN class="keyword">.</SPAN><SPAN class="string">'&lt;-'</SPAN>&nbsp;<SPAN class="keyword">self</SPAN>&nbsp;</CODE><CODE><I>LI</I></CODE><CODE>&nbsp;</CODE><CODE><I>X</I></CODE><CODE>}&nbsp;%%&nbsp;<SPAN class="comment">Object.'&lt;-'&nbsp;is&nbsp;internal</SPAN></CODE></P></TD></TR><TR valign="top"><TD><P><CODE><I>Y</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>LI</I></CODE><CODE>&nbsp;<SPAN class="keyword">&lt;-</SPAN>&nbsp;</CODE><CODE><I>X</I></CODE></P></TD><TD><P><CODE>{Object<SPAN class="keyword">.</SPAN>exchange&nbsp;<SPAN class="keyword">self</SPAN>&nbsp;</CODE><CODE><I>LI</I></CODE><CODE>&nbsp;</CODE><CODE><I>X</I></CODE><CODE>&nbsp;</CODE><CODE><I>Y</I></CODE><CODE>}&nbsp;%%&nbsp;<SPAN class="comment">Object.exchange&nbsp;is&nbsp;internal</SPAN></CODE></P></TD></TR><TR valign="top"><TD colspan="2"><P>non-associative</P></TD></TR><TR valign="top"><TD><P><CODE>?<I>B</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE><I>X</I></CODE><CODE>&nbsp;<SPAN class="keyword">==</SPAN>&nbsp;</CODE><CODE><I>Y</I></CODE></P></TD><TD><P><CODE>{Value<SPAN class="keyword">.</SPAN><SPAN class="string">'=='</SPAN>&nbsp;</CODE><CODE><I>X</I></CODE><CODE>&nbsp;</CODE><CODE><I>Y</I></CODE><CODE>&nbsp;</CODE><CODE><I>B</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD><P><CODE>?<I>B</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE><I>X</I></CODE><CODE>&nbsp;<SPAN class="keyword">\=</SPAN>&nbsp;</CODE><CODE><I>Y</I></CODE></P></TD><TD><P><CODE>{Value<SPAN class="keyword">.</SPAN><SPAN class="string">'\\='</SPAN>&nbsp;</CODE><CODE><I>X</I></CODE><CODE>&nbsp;</CODE><CODE><I>Y</I></CODE><CODE>&nbsp;</CODE><CODE><I>B</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD><P><CODE>?<I>B</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>AFI1</I></CODE><CODE>&nbsp;<SPAN class="keyword">&lt;</SPAN>&nbsp;</CODE><CODE>+<I>AFI2</I></CODE></P></TD><TD><P><CODE>{Value<SPAN class="keyword">.</SPAN><SPAN class="string">'&lt;'</SPAN>&nbsp;</CODE><CODE><I>AFI1</I></CODE><CODE>&nbsp;</CODE><CODE><I>AFI2</I></CODE><CODE>&nbsp;</CODE><CODE><I>B</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD><P><CODE>?<I>B</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>AFI1</I></CODE><CODE>&nbsp;<SPAN class="keyword">=&lt;</SPAN>&nbsp;</CODE><CODE>+<I>AFI2</I></CODE></P></TD><TD><P><CODE>{Value<SPAN class="keyword">.</SPAN><SPAN class="string">'=&lt;'</SPAN>&nbsp;</CODE><CODE><I>AFI1</I></CODE><CODE>&nbsp;</CODE><CODE><I>AFI2</I></CODE><CODE>&nbsp;</CODE><CODE><I>B</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD><P><CODE>?<I>B</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>AFI1</I></CODE><CODE>&nbsp;<SPAN class="keyword">&gt;</SPAN>&nbsp;</CODE><CODE>+<I>AFI2</I></CODE></P></TD><TD><P><CODE>{Value<SPAN class="keyword">.</SPAN><SPAN class="string">'&gt;'</SPAN>&nbsp;</CODE><CODE><I>AFI1</I></CODE><CODE>&nbsp;</CODE><CODE><I>AFI2</I></CODE><CODE>&nbsp;</CODE><CODE><I>B</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD><P><CODE>?<I>B</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>AFI1</I></CODE><CODE>&nbsp;<SPAN class="keyword">&gt;=</SPAN>&nbsp;</CODE><CODE>+<I>AFI2</I></CODE></P></TD><TD><P><CODE>{Value<SPAN class="keyword">.</SPAN><SPAN class="string">'&gt;='</SPAN>&nbsp;</CODE><CODE><I>AFI1</I></CODE><CODE>&nbsp;</CODE><CODE><I>AFI2</I></CODE><CODE>&nbsp;</CODE><CODE><I>B</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD colspan="2"><P>left-associative</P></TD></TR><TR valign="top"><TD><P><CODE>?<I>FI3</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>FI1</I></CODE><CODE>&nbsp;<SPAN class="keyword">+</SPAN>&nbsp;</CODE><CODE>+<I>FI2</I></CODE></P></TD><TD><P><CODE>{Number<SPAN class="keyword">.</SPAN><SPAN class="string">'+'</SPAN>&nbsp;</CODE><CODE><I>FI1</I></CODE><CODE>&nbsp;</CODE><CODE><I>FI2</I></CODE><CODE>&nbsp;</CODE><CODE><I>FI3</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD><P><CODE>?<I>FI3</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>FI1</I></CODE><CODE>&nbsp;<SPAN class="keyword">-</SPAN>&nbsp;</CODE><CODE>+<I>FI2</I></CODE></P></TD><TD><P><CODE>{Number<SPAN class="keyword">.</SPAN><SPAN class="string">'-'</SPAN>&nbsp;</CODE><CODE><I>FI1</I></CODE><CODE>&nbsp;</CODE><CODE><I>FI2</I></CODE><CODE>&nbsp;</CODE><CODE><I>FI3</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD colspan="2"><P>left-associative</P></TD></TR><TR valign="top"><TD><P><CODE>?<I>FI3</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>FI1</I></CODE><CODE>&nbsp;<SPAN class="keyword">*</SPAN>&nbsp;</CODE><CODE>+<I>FI2</I></CODE></P></TD><TD><P><CODE>{Number<SPAN class="keyword">.</SPAN><SPAN class="string">'*'</SPAN>&nbsp;</CODE><CODE><I>FI1</I></CODE><CODE>&nbsp;</CODE><CODE><I>FI2</I></CODE><CODE>&nbsp;</CODE><CODE><I>FI3</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD><P><CODE>?<I>F3</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>F1</I></CODE><CODE>&nbsp;<SPAN class="keyword">/</SPAN>&nbsp;</CODE><CODE>+<I>F2</I></CODE></P></TD><TD><P><CODE>{Float<SPAN class="keyword">.</SPAN><SPAN class="string">'/'</SPAN>&nbsp;</CODE><CODE><I>F1</I></CODE><CODE>&nbsp;</CODE><CODE><I>F2</I></CODE><CODE>&nbsp;</CODE><CODE><I>F3</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD><P><CODE>?<I>I3</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>I1</I></CODE><CODE>&nbsp;<SPAN class="keyword">div</SPAN>&nbsp;</CODE><CODE>+<I>I2</I></CODE></P></TD><TD><P><CODE>{Int<SPAN class="keyword">.</SPAN><SPAN class="string">'div'</SPAN>&nbsp;</CODE><CODE><I>I1</I></CODE><CODE>&nbsp;</CODE><CODE><I>I2</I></CODE><CODE>&nbsp;</CODE><CODE><I>I3</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD><P><CODE>?<I>I3</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>I1</I></CODE><CODE>&nbsp;<SPAN class="keyword">mod</SPAN>&nbsp;</CODE><CODE>+<I>I2</I></CODE></P></TD><TD><P><CODE>{Int<SPAN class="keyword">.</SPAN><SPAN class="string">'mod'</SPAN>&nbsp;</CODE><CODE><I>I1</I></CODE><CODE>&nbsp;</CODE><CODE><I>I2</I></CODE><CODE>&nbsp;</CODE><CODE><I>I3</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD colspan="2"><P>right-associative</P></TD></TR><TR valign="top"><TD><P><CODE>+<I>K</I></CODE><CODE><SPAN class="keyword">,</SPAN>&nbsp;</CODE><CODE>+<I>R</I></CODE></P></TD><TD><P><CODE>{Object<SPAN class="keyword">.</SPAN><SPAN class="string">','</SPAN>&nbsp;</CODE><CODE><I>K</I></CODE><CODE>&nbsp;</CODE><CODE><I>R</I></CODE><CODE>}&nbsp;&nbsp;%%&nbsp;<SPAN class="comment">Object.','&nbsp;is&nbsp;internal</SPAN></CODE></P></TD></TR><TR valign="top"><TD colspan="2"><P>prefix</P></TD></TR><TR valign="top"><TD><P><CODE>?<I>FI1</I></CODE><CODE>&nbsp;=&nbsp;<SPAN class="keyword">~</SPAN></CODE><CODE>+<I>FI2</I></CODE></P></TD><TD><P><CODE>{Number<SPAN class="keyword">.</SPAN><SPAN class="string">'~'</SPAN>&nbsp;</CODE><CODE><I>FI2</I></CODE><CODE>&nbsp;</CODE><CODE><I>FI1</I></CODE><CODE>}</CODE></P></TD></TR><TR valign="top"><TD colspan="2"><P>left-associative</P></TD></TR><TR valign="top"><TD><P><CODE><I>X</I></CODE><CODE>&nbsp;=&nbsp;</CODE><CODE>+<I>Y</I></CODE><CODE><SPAN class="keyword">.</SPAN></CODE><CODE>+<I>LI</I></CODE></P></TD><TD><P>get content of Record, Dictionary, or Array element</P></TD></TR><TR valign="top"><TD colspan="2"><P>prefix</P></TD></TR><TR valign="top"><TD><P><CODE><I>X</I></CODE><CODE>&nbsp;=&nbsp;<SPAN class="keyword">@</SPAN></CODE><CODE>+<I>Y</I></CODE></P></TD><TD><P>get content of Cell, Attribute, Dictionary or Array element</P></TD></TR><TR valign="top"><TD><P><CODE><I>X</I></CODE><CODE>&nbsp;=&nbsp;<SPAN class="keyword">!!</SPAN></CODE><CODE><I>Y</I></CODE></P></TD><TD><P><CODE>{Value<SPAN class="keyword">.</SPAN><SPAN class="string">'!!'</SPAN>&nbsp;</CODE><CODE><I>X</I></CODE><CODE>&nbsp;</CODE><CODE><I>Y</I></CODE><CODE>}</CODE></P></TD></TR></TABLE><P></P><P> The expansion of the state-manipulation operators (<CODE><SPAN class="keyword">.</SPAN></CODE>, <CODE><SPAN class="keyword">:=</SPAN></CODE>, and <CODE><SPAN class="keyword">@</SPAN></CODE>) depends on the type of the expressions involved. The expansions are simplified, suitable error messages are returned if the type of the expressions are not valid. </P><DL><DT><A name="label761"></A><SPAN class="index"><CODE>E1<SPAN class="keyword">.</SPAN>E2</CODE></SPAN> <A name="label762"></A> </DT><DD><BLOCKQUOTE class="synopsis"><P><CODE>E1<SPAN class="keyword">.</SPAN>E2</CODE> expands to </P><BLOCKQUOTE class="code"><CODE><SPAN class="keyword">if</SPAN>&nbsp;{Record<SPAN class="keyword">.</SPAN>is&nbsp;E1}&nbsp;<SPAN class="keyword">then</SPAN>&nbsp;{Value<SPAN class="keyword">.</SPAN><SPAN class="string">'.'</SPAN>&nbsp;E1&nbsp;E2}&nbsp;<SPAN class="keyword">else</SPAN>&nbsp;<SPAN class="keyword">@</SPAN>(E1<SPAN class="keyword">#</SPAN>E2)&nbsp;<SPAN class="keyword">end</SPAN></CODE></BLOCKQUOTE><P> </P></BLOCKQUOTE></DD><DD><P>returns the content of a record, dictionary, or array element. </P></DD><DT><A name="label763"></A><SPAN class="index"><CODE>E1<SPAN class="keyword">.</SPAN>E2&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;E3</CODE></SPAN> <A name="label764"></A> </DT><DD><BLOCKQUOTE class="synopsis"><P><CODE>E1<SPAN class="keyword">.</SPAN>E2&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;E3</CODE> expands to </P><BLOCKQUOTE class="code"><CODE><SPAN class="keyword">@</SPAN>(E1<SPAN class="keyword">#</SPAN>E2)&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;E3</CODE></BLOCKQUOTE><P> </P></BLOCKQUOTE></DD><DD><P><CODE><SPAN class="string">'.&nbsp;:='</SPAN></CODE> is a <EM>ternary</EM> operator for updating dictionary and array elements. </P></DD><DT><A name="label765"></A><SPAN class="index"><CODE>E1&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;E2</CODE></SPAN> <A name="label766"></A> </DT><DD><BLOCKQUOTE class="synopsis"><P><CODE>E1&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;E2</CODE> expands to </P><BLOCKQUOTE class="code"><CODE><SPAN class="keyword">case</SPAN>&nbsp;E1&nbsp;&nbsp;<BR><SPAN class="keyword">of</SPAN>&nbsp;(D<SPAN class="keyword">#</SPAN>K)&nbsp;<SPAN class="keyword">andthen</SPAN>&nbsp;{Dictionary<SPAN class="keyword">.</SPAN>is&nbsp;D}&nbsp;<SPAN class="keyword">then</SPAN>&nbsp;{Dictionary<SPAN class="keyword">.</SPAN>put&nbsp;D&nbsp;K&nbsp;E2}<BR><SPAN class="keyword">[]</SPAN>&nbsp;(A<SPAN class="keyword">#</SPAN>I)&nbsp;<SPAN class="keyword">then</SPAN>&nbsp;{Array<SPAN class="keyword">.</SPAN>put&nbsp;A&nbsp;I&nbsp;E2}&nbsp;&nbsp;<BR><SPAN class="keyword">elseif</SPAN>&nbsp;{IsCell&nbsp;E1}&nbsp;<SPAN class="keyword">then</SPAN>&nbsp;<BR>&nbsp;&nbsp;&nbsp;{Cell<SPAN class="keyword">.</SPAN>assign&nbsp;E1&nbsp;E2}<BR><SPAN class="keyword">else</SPAN>&nbsp;<BR>&nbsp;&nbsp;&nbsp;{Object<SPAN class="keyword">.</SPAN>assign&nbsp;<SPAN class="keyword">self</SPAN>&nbsp;E1&nbsp;E2}&nbsp;&nbsp;&nbsp;%%&nbsp;<SPAN class="comment">E1&nbsp;&lt;-&nbsp;E2&nbsp;(Object.assign&nbsp;is&nbsp;internal)<BR></SPAN><SPAN class="keyword">end</SPAN></CODE></BLOCKQUOTE><P> </P></BLOCKQUOTE></DD><DD><P><CODE><SPAN class="string">':='</SPAN></CODE> updates dictionaries, arrays, cells, and attributes. Note, <CODE>Object<SPAN class="keyword">.</SPAN>assign</CODE> is a dummy routine and not actually visible to the library user. </P></DD><DT><A name="label767"></A><SPAN class="index"><CODE><SPAN class="keyword">@</SPAN>E</CODE></SPAN> <A name="label768"></A> </DT><DD><BLOCKQUOTE class="synopsis"><P><CODE><SPAN class="keyword">@</SPAN>E</CODE> expands to </P><BLOCKQUOTE class="code"><CODE><SPAN class="keyword">case</SPAN>&nbsp;E<BR><SPAN class="keyword">of</SPAN>&nbsp;(D<SPAN class="keyword">#</SPAN>K)&nbsp;<SPAN class="keyword">andthen</SPAN>&nbsp;{Dictionary<SPAN class="keyword">.</SPAN>is&nbsp;D}&nbsp;<SPAN class="keyword">then</SPAN>&nbsp;{Dictionary<SPAN class="keyword">.</SPAN>get&nbsp;D&nbsp;K}<BR><SPAN class="keyword">[]</SPAN>&nbsp;(A<SPAN class="keyword">#</SPAN>I)&nbsp;<SPAN class="keyword">then</SPAN>&nbsp;{Array<SPAN class="keyword">.</SPAN>get&nbsp;A&nbsp;I}&nbsp;&nbsp;<BR><SPAN class="keyword">elseif</SPAN>&nbsp;{IsCell&nbsp;E}&nbsp;<SPAN class="keyword">then</SPAN>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{Cell<SPAN class="keyword">.</SPAN>access&nbsp;E}<BR><SPAN class="keyword">else</SPAN>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{Object<SPAN class="keyword">.</SPAN>access&nbsp;<SPAN class="keyword">self</SPAN>&nbsp;E}&nbsp;&nbsp;&nbsp;%%&nbsp;<SPAN class="comment">@E&nbsp;(Object.access&nbsp;is&nbsp;internal)<BR></SPAN><SPAN class="keyword">end</SPAN></CODE></BLOCKQUOTE><P> </P></BLOCKQUOTE></DD><DD><P><CODE><SPAN class="string">'@'</SPAN></CODE> returns the current value stored in dictionaries, arrays, cells, and attributes. Note, <CODE>Object<SPAN class="keyword">.</SPAN>access</CODE> is a dummy routine and not actually visible to the library user. </P></DD><DT><A name="label769"></A><SPAN class="index"><CODE>X&nbsp;=&nbsp;E1&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;E2</CODE></SPAN> <A name="label770"></A> </DT><DD><BLOCKQUOTE class="synopsis"><P><CODE>X&nbsp;=&nbsp;E1&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;E2</CODE> expands to </P><BLOCKQUOTE class="code"><CODE><SPAN class="string">'atomic'</SPAN>&nbsp;<BR>&nbsp;&nbsp;&nbsp;X&nbsp;=&nbsp;<SPAN class="keyword">@</SPAN>E1<BR>&nbsp;&nbsp;&nbsp;E1&nbsp;<SPAN class="keyword">:=</SPAN>&nbsp;E2<BR><SPAN class="string">'end'</SPAN></CODE></BLOCKQUOTE><P> </P></BLOCKQUOTE></DD><DD><P>In an expression context <CODE><SPAN class="string">':='</SPAN></CODE> performs an atomic exchange with the current value stored in the dictionary, array, cell, or attribute. Note <CODE><SPAN class="string">'atomic'</SPAN>&nbsp;<SPAN class="keyword">...</SPAN>&nbsp;<SPAN class="string">'end'</SPAN></CODE> is pseudo code to indicate that the exchange is an atomic action.</P></DD></DL><P> </P></DIV><TABLE align="center" border="0" cellpadding="6" cellspacing="6" class="nav"><TR bgcolor="#DDDDDD"><TD><A href="node12.html#chapter.control">&lt;&lt; Prev</A></TD><TD><A href="index.html">- Up -</A></TD><TD><A href="node15.html#chapter.misc">Next &gt;&gt;</A></TD></TR></TABLE><HR><ADDRESS><A href="http://www.ps.uni-sb.de/~duchier/">Denys&nbsp;Duchier</A>, <A href="http://www.ps.uni-sb.de/~kornstae/">Leif&nbsp;Kornstaedt</A> and&nbsp;<A href="http://www.ps.uni-sb.de/~schulte/">Christian&nbsp;Schulte</A><BR><SPAN class="version">Version 1.4.0 (20090610)</SPAN></ADDRESS></BODY></HTML>