評価の順序
式の中のオペランドの評価について保証された順序はありません。したがって、ある変数が式の中の任意の位置で 2 回使用され、副次作用の可能性 がある場合には、予期した結果とならないことがあります。
たとえば、図 1 に示されているソースを考えてみます。 ここで、A は変数、FN は A を変更するプロシージャーです。2 番目の EVAL 命令の 式部分に A が 2 回現れます。 加算演算の左辺 (オペランド 1) が最初に評価された場合には、X に は値 17、つまり (5 + FN(5) = 5 + 12 = 17) が割り当てられます。 加算演算の右辺 (オペランド 2) が最初に評価された場合には、X に は値 18、つまり (6 + FN(5) = 6 + 12 = 18) が割り当てられます。
図 1. 副次作用がある呼び出しのコーディング例
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
* A is a variable. FN is procedure that modifies A.
/free
a = 5;
x = a + fn(a);
/end-free
P fn B
D fn PI 5P 0
D parm 5P 0
/free
parm = parm + 1;
return 2 * parm;
/end-free
P fn E