Rather than using pass-by-reference for input/output parameters, Algol used the more powerful mechanism of pass-by-name.
In essence, you can pass in the symbolic "name"; of a variable, which allows it both to be accessed and updated.
For example, to double the value of C[j]
, you can pass its name (not its value) into the following procedure.
procedure double(x); real x; begin x := x * 2 end;
In general, the effect of pass-by-name is to textually substitute the argument expressions in a procedure call for the corresponding parameters in the body of the procedure, e.g., double(C[j])
is interpreted as C[j] := C[j] * 2
.
Technically, if any of the variables in the called procedure clash with the caller's variables, they must be renamed uniquely before substitution.
Implications of the pass-by-name mechanism:
- The argument expression is re-evaluated each time the formal parameter is accessed.
- The procedure can change the values of variables used in the argument expression and hence change the expression's value.