評価の順序

式の中のオペランドの評価について保証された順序はありません。したがって、ある変数が式の中の任意の位置で 2 回使用され、副次作用の可能性 がある場合には、予期した結果とならないことがあります。

たとえば、図 169 に示されているソースを考えてみます。 ここで、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) が割り当てられます。

図 169. 副次作用がある呼び出しのコーディング例
 *..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