|
If we look at a context it consists of a set of pairs, each pair being
a name (an identifier) and a value (that is said to be assigned to
that identifier).
When a function is applied actual arguments are substituted for formal
arguments, and the body of the function is evaluated. The process of
evaluating an actual argument yields a value and any associated names are
ignored. Magma's evaluation semantics treats identifiers as 'indexes' into
the context -- when Magma wants the value of say x it searches through
the context looking for a pair whose name component is x. The corresponding
value component is then used as the value of x and the name part is
simply ignored thereafter.
When we call a procedure with a reference argument, however, the name
components of the context become important. When, for example we pass
x as an actual reference argument to a formal reference argument y
in some procedure, Magma remembers the name x. Then if y is changed
(e.g., by assignment) in the called procedure, Magma, knowing the name x,
finds the appropriate pair in the calling context and updates it by
changing its corresponding value component. To see how this works take
the example in the previous section. It was,
> a := 5; b := 6;
> p := procedure( x, ~y ) y := x; end procedure;
> p(a, ~b);
In the call Magma remembers the name b. Then when y is assigned to in
the body of p, Magma knows that y is really b in the calling context,
and hence changes b in the calling context appropriately. This example
shows that an alternate way of thinking of reference arguments is as
synonyms for the same part of (or pair in) the calling context.
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|