aboutsummaryrefslogtreecommitdiffstats
path: root/system/doc/extensions/misc.xml
diff options
context:
space:
mode:
Diffstat (limited to 'system/doc/extensions/misc.xml')
-rw-r--r--system/doc/extensions/misc.xml310
1 files changed, 0 insertions, 310 deletions
diff --git a/system/doc/extensions/misc.xml b/system/doc/extensions/misc.xml
deleted file mode 100644
index 576f705278..0000000000
--- a/system/doc/extensions/misc.xml
+++ /dev/null
@@ -1,310 +0,0 @@
-<?xml version="1.0" encoding="latin1" ?>
-<!DOCTYPE chapter SYSTEM "chapter.dtd">
-
-<chapter>
- <header>
- <copyright>
- <year>1999</year><year>2009</year>
- <holder>Ericsson AB. All Rights Reserved.</holder>
- </copyright>
- <legalnotice>
- The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved online at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- </legalnotice>
-
- <title>Miscellaneous</title>
- <prepared>Arndt Jonasson</prepared>
- <docno>1</docno>
- <date>99-01-25</date>
- <rev>PA1</rev>
- <file>misc.sgml</file>
- </header>
- <p>In this chapter, a number of miscellaneous features of Erlang
- are described.</p>
-
- <section>
- <title>Token Syntax</title>
- <p>In Erlang 4.8 (OTP R5A) the syntax of Erlang tokens have been
- extended to allow the use of the full ISO-8859-1 (Latin-1) character
- set. This is noticeable in the following ways:</p>
- <list type="bulleted">
- <item>All the Latin-1 printable characters can be used and are shown without
- the escape backslash convention.</item>
- <item>Atoms and variables can use all Latin-1 letters.</item>
- </list>
- <p>The new characters from Latin-1 have the following
- classifications in Erlang:</p>
- <table>
- <row>
- <cell align="left" valign="middle"><em>Octal</em></cell>
- <cell align="left" valign="middle"><em>Decimal</em></cell>
- <cell align="left" valign="middle">&nbsp;</cell>
- <cell align="left" valign="middle"><em>Class</em></cell>
- </row>
- <row>
- <cell align="left" valign="middle">200 - 237</cell>
- <cell align="left" valign="middle">128 - 159</cell>
- <cell align="left" valign="middle">&nbsp;</cell>
- <cell align="left" valign="middle">Control characters</cell>
- </row>
- <row>
- <cell align="left" valign="middle">240 - 277</cell>
- <cell align="left" valign="middle">160 - 191</cell>
- <cell align="right" valign="middle">- &iquest;</cell>
- <cell align="left" valign="middle">Punctuation characters</cell>
- </row>
- <row>
- <cell align="left" valign="middle">300 - 326</cell>
- <cell align="left" valign="middle">192 - 214</cell>
- <cell align="center" valign="middle">&Agrave; - &Ouml;</cell>
- <cell align="left" valign="middle">Uppercase letters</cell>
- </row>
- <row>
- <cell align="center" valign="middle">327</cell>
- <cell align="center" valign="middle">215</cell>
- <cell align="center" valign="middle">&times;</cell>
- <cell align="left" valign="middle">Punctuation character</cell>
- </row>
- <row>
- <cell align="left" valign="middle">330 - 336</cell>
- <cell align="left" valign="middle">216 - 222</cell>
- <cell align="center" valign="middle">&Oslash; - &THORN;</cell>
- <cell align="left" valign="middle">Uppercase letters</cell>
- </row>
- <row>
- <cell align="left" valign="middle">337 - 366</cell>
- <cell align="left" valign="middle">223 - 246</cell>
- <cell align="center" valign="middle">&szlig; - &ouml;</cell>
- <cell align="left" valign="middle">Lowercase letters</cell>
- </row>
- <row>
- <cell align="center" valign="middle">367</cell>
- <cell align="center" valign="middle">247</cell>
- <cell align="center" valign="middle">&divide;</cell>
- <cell align="left" valign="middle">Punctuation character</cell>
- </row>
- <row>
- <cell align="left" valign="middle">370 - 377</cell>
- <cell align="left" valign="middle">248 - 255</cell>
- <cell align="center" valign="middle">&oslash; - &yuml;</cell>
- <cell align="left" valign="middle">Lowercase letters</cell>
- </row>
- <tcaption>Character classes</tcaption>
- </table>
- </section>
-
- <section>
- <title>String Concatenation</title>
- <p>Two adjacent string literals are concatenated into one. This is done already
- at compile-time, and doesn't incur any runtime overhead. Example:</p>
- <code type="none">
- "string" "42" </code>
- <p>is equivalent to</p>
- <code type="none">
- "string42" </code>
- <p>This feature is convenient in at least two situations:</p>
- <list type="bulleted">
- <item>when one of the
- strings is the result of a macro expansion;</item>
- <item>when a string is very
- long, and would otherwise either have to wrap, making the source code
- harder to read, or force the use of some runtime append operation.</item>
- </list>
- </section>
-
- <section>
- <title>The ++ list Concatenation Operator</title>
- <p>Since list concatenation is a very common operation, it is convenient
- to have a terse way of expressing it. The ++ operator appends its second
- argument to its first. Example:
- </p>
- <code type="none">
- X = [1,2,3],
- Y = [4,5],
- X ++ Y. </code>
- <p>results in <c>[1,2,3,4,5]</c>.</p>
- <p>The ++ operator has precedence between the binary '+' operator and
- the comparison operators.
- </p>
- </section>
-
- <section>
- <title>The - - list Subtraction Operator</title>
- <p>The - - operator produces a list which is a copy of the first
- argument, subjected to the following procedure: for each element in
- the second argument, its first occurrence in the first argument is
- removed.</p>
- <code type="none">
- X = [1,2,3,2,1,2],
- Y = [2,1,2],
- X -- Y. </code>
- <p>results in <c>[3,1,2]</c>.</p>
- <p>The - - operator has precedence between the binary '+' operator and
- the comparison operators.
- </p>
- </section>
-
- <section>
- <title>Bitwise Operator bnot</title>
- <p>Apart from the binary bitwise operators <c>band</c>, <c>bor</c>
- and <c>bxor</c>, there is a unary operator <c>bnot</c> with the same
- precedence as the other unary operators + and -, i.e., higher than
- the binary operators. Example:</p>
- <code type="none">
- bnot 7. </code>
- <p>returns -8.
- </p>
- </section>
-
- <section>
- <title>Logical Operators</title>
- <p>The atoms <c>true</c> and <c>false</c> are usually used for representing
- Boolean values. With the binary operators <c>and</c>, <c>or</c> and
- <c>xor</c>, and the unary operator <c>not</c>, Boolean values can be
- combined. Example:</p>
- <code type="none">
-
- M1 = lists:member(A, List1),
- M2 = lists:member(A, List2),
- M1 and M2.</code>
- <p>Note that the operators are strict, i.e., they always evaluate both
- their arguments.</p>
- <p><c>not</c> has the same priority as the other unary operators. The
- binary logical operators have precedence between the <c>=</c> operator
- and the comparison operators, the <c>and</c> operator having higher
- precedence than <c>or</c> and <c>xor</c>.
- </p>
- </section>
-
- <section>
- <title>Match Operator = In Patterns</title>
- <p>This extension was added in Erlang 4.8 (OTP R5A).</p>
- <p>The = operator is also called the `match' operator. The match operator
- can now be used in a pattern, so that <c>P1 = P2</c> is a valid pattern,
- where both <c>P1</c> and <c>P2</c> are patterns. This compound pattern
- when matched against a term causes the term to be matched against both
- <c>P1</c> and <c>P2</c>.</p>
- <p>One use for this construction is to avoid reconstructing a term which
- was part of an argument to a function. Example:</p>
- <code type="none">
- f({'+',X,Y}=T) -> {X+Y,T}.</code>
- <p>It also makes it possible to rewrite the construction</p>
- <code type="none">
- f(X) when X == #rec{x=1, y=a} -> ... </code>
- <p>as</p>
- <code type="none">
- f(#rec{x=1, y=a} = X) -> ... </code>
- <p>In the absence of optimization for the former case, the
- latter case is more efficient.
- </p>
- </section>
-
- <section>
- <title>Literal String Prefix in Patterns</title>
- <p>This extension was added in Erlang 4.8 (OTP R5A).</p>
- <p>A new construction is allowed in patterns, namely a literal
- string as the first operand of the ++ operator. Example:</p>
- <code type="none">
- f("prefix" ++ L) -> ... </code>
- <p>This is syntactic sugar for the equivalent, but harder to read</p>
- <code type="none">
- f([$p,$r,$e,$f,$i,$x | L]) -> ... </code>
- </section>
-
- <section>
- <title>Disjunctions in Guards</title>
- <p>This extension was added in Erlang 4.9 (OTP R6A).</p>
- <p>A new construction is allowed in guards, the disjunction operator
- ';'. The construction is syntactic sugar which removes the bother of
- writing the same body after several guards.</p>
- <code type="none">
- f(X) when xxx ; yyy ; zzz ->
- pop(X).</code>
- <p>This is syntactic sugar for the equivalent</p>
- <code type="none">
- f(X) when xxx ->
- pop(X);
- f(X) when yyy ->
- pop(X);
- f(X) when zzz ->
- pop(X). </code>
- <p>The abstract format has been changed accordingly to contain a list of
- (conjunctive) guards where there was previously only one guard.
- </p>
- </section>
-
- <section>
- <title>Expressions in Patterns</title>
- <p>This extension was added in Erlang 5.0 (OTP R7A).</p>
- <p>An arithmetic expression can be used within a pattern, if it uses
- only numeric or bitwise operators, and if its value can be evaluated
- to a constant at compile-time. This is especially useful when the
- expression is defined by a macro.
- </p>
- <p>Example:</p>
- <code type="none">
- case X of
- {1+2, T} -> T
- end.</code>
- </section>
-
- <section>
- <title>Boolean expresions in guards</title>
- <p>This extension was added in Erlang 5.1 (OTP R8).</p>
- <p>In guards, the use of <c>and</c>, <c>or</c> and <c>not</c> is
- now allowed. Guard expressions can combine these with
- parenthesis. This allows for more elaborate guards than what
- may be given with <c>,</c> and <c>;</c>.</p>
- <note>
- <p>The guard expressions written with these operators are boolean
- expressions, and the boolean functions <c>is_list</c>,
- <c>is_integer</c> etc. should be used, rather than
- <c>list</c>, <c>integer</c> etc.</p>
- </note>
- <p>Example 1:</p>
- <code type="none">
- f(X) when not (is_tuple(X) or is_list(X)) ->
- ... </code>
- <p>Example 2:</p>
- <code type="none"><![CDATA[
- g(A, B) when (A > 0) and (B > 0) and not (A*A < B*B) ->
- ... ]]></code>
- </section>
-
- <section>
- <title>Short-circuit boolean expressions</title>
- <p>This extension was added in Erlang 5.1 (OTP R8).</p>
- <p>In a boolean expression it is unnecessary to always evaluate all
- terms. If the first term gives a result that determines the
- result, the second term is not needed. In Erlang two new
- keywords handles boolean expressions without evaluating both
- terms, if it's unnecessary. (This is called short-curcuit
- boolean evaluation.)</p>
- <p>The keyword <c>andalso</c> is a short-curcuit version of
- <c>and</c>. The keyword <c>orelse</c> is a short-curcuit version
- of <c>or</c>. They can be used in boolean expressions (not
- guards) instead of <c>and</c> and <c>or</c>.</p>
- <p>Example 1:</p>
- <code type="none">
- case A >= -1.0 andalso math:sqrt(A+1) > B of </code>
- <p>This will work even if <c>A</c> is less than <c>-1.0</c>, since
- in that case, the second term (after <c>andalso</c>) is never
- evaluated. (Of course, the same effects could have been done
- using guards. In guards, evaluation is always short-circuited,
- since guard tests are known to be free of side-effects.)</p>
- <p>Example 2:</p>
- <code type="none">
- OnlyOne = is_atom(L) orelse
- (is_list(L) andalso length(L) == 1), </code>
- </section>
-</chapter>
-