]>
A variable in Axiom refers to a value. A variable has a name beginning with an uppercase or lowercase alphabetic character, ``%'', or ``!''. Successive characters (if any) can be any of the above, digits, or ``?''. Case is distinguished. The following are all examples of valid, distinct variable names:
The ``:='' operator is the immediate assignment operator. assignment:immediate Use it to associate a value with a variable. immediate assignment
The syntax for immediate assignment for a single variable is
variable expression
The value returned by an immediate assignment is the value of
expression.
The right-hand side of the expression is evaluated, yielding . This value is then assigned to .
The right-hand side of the expression is evaluated, yielding . This value is then assigned to . Thus and both have the value after the sequence of assignments.
What is the value of if is assigned the value ?
As you see, the value of is left unchanged.
This is what we mean when we say this kind of assignment is immediate; has no dependency on after the initial assignment. This is the usual notion of assignment found in programming languages such as C, C language:assignment PASCAL PASCAL:assignment and FORTRAN. FORTRAN:assignment
Axiom provides delayed assignment with ``==''. assignment:delayed This implements a delayed assignment delayed evaluation of the right-hand side and dependency checking.
The syntax for delayed assignment is
variable expression
The value returned by a delayed assignment is the unique value of Void.
Using and as above, these are the corresponding delayed assignments.
The right-hand side of each delayed assignment is left unevaluated until the variables on the left-hand sides are evaluated. Therefore this evaluation and ...
this evaluation seem the same as before.
If we change to
then evaluates to , as expected, but
the value of reflects the change to .
It is possible to set several variables at the same time assignment:multiple immediate by using multiple immediate assignment a tuple of variables and a tuple of expressions. Note that a tuple is a collection of things separated by commas, often surrounded by parentheses.
The syntax for multiple immediate assignments is
( , , ..., ) := ( , , ..., )
The value returned by an immediate assignment is the value of
.
This sets to and to .
Multiple immediate assigments are parallel in the sense that the expressions on the right are all evaluated before any assignments on the left are made. However, the order of evaluation of these expressions is undefined.
You can use multiple immediate assignment to swap the values held by variables.
has the previous value of .
has the previous value of .
There is no syntactic form for multiple delayed assignments. See the discussion in section ugUserDelay about how Axiom differentiates between delayed assignments and user functions of no arguments.