引数の評価順序

副作用のある言語(CとかSchemeとかOCamlとか)で、関数や演算子の引数の評価順序が「不定」であるためにハマる事例を立て続けに見てしまった(自分でもハマったことがある)。OCamlは(おそらくバイトコードがスタックマシンな関係で)実際にはright-to-leftになる場合が多い。MinCamlは、K正規化はleft-to-rightにやっているのだが、比較演算子のparsingをサボっているせいで「不定」になっている部分があることを指摘された(多謝です>指摘してくれた人)。当たり前だが型エラー等も出ないし、凶悪だと思う(←自分で言うな)。Standard MLのように*1left-to-right evaluationを強制すべきなのだろうか。

*1:"The Definition of Standard ML (Revised)"の40ページ