式の中のオペランドの評価について保証された順序はありません。したがって、ある変数が式の中の任意の位置で 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) が割り当てられます。
*..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
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.