MLについて

MLは「正格」を前提とする言語なので、実行時には処理順が確定しているとのコメントをいただきました。ありがとうございました。
せっかくなのでちょっと調べてみました。

引数が未定義であるときはつねに関数の値も定義されないならば、このような関数を正格である (strict) ということを思い起こそう。
R. Bird, P. Wadler, "関数プログラミング", 竹市正人 訳, 近代科学社, 1991., ISBN4-7649-0181-1, p. 148.

* 正格である (strict) 言語では、関数の引数は、つねに関数が起動する前に評価されます。結果として、 (例えば、それがランタイム・エラーを引き起こしたり無限ループに落ち込んだりすると) exp 式の評価は適切に終了しませんし、フォーム f(exp) 式もまた適切に終了しないでしょう。 ML や Scheme が、正格言語に当たります。
* 非正格である (non-strict) 言語では、関数の引数は、その値が実際に要求されるまで評価されません。例えば、フォーム f(exp) から成る式の評価は、もしパラメータの値が f の本体で用いられないならば、たとえ exp の評価が適切に終了しなくても、適切に終了します。 Miranda や Haskell が、このアプローチを採用しています

なるほど、関数型言語すべてが正格な訳ではなく、Haskellは非正格であると……。
時間を見つけて勉強してみます>正格、非正格な関数型言語