在OCaml中,函数应用程序的评估顺序未指定(也称为非确定性)。
在标准ML中,它是否也是非确定性的或确定性的?您能否提供澄清的规范部分的参考?
编辑:对于你们后来的人来说,我也学到了像SML一样,在F#中指定顺序和确定性 - 与OCaml不同,考虑到两者在语法上的接近程度,这更加疯狂。如果你在他们之间切换很容易忘记。
答案 0 :(得分:8)
是的,评估规则(Definition的第6.7节)完全指定了所有SML结构的评估顺序,并且它始终采用文本顺序。对于应用程序,首先评估函数表达式,然后评估参数(例如规则102)。同样,记录(以及元组)从左到右进行评估(规则92/95)。
在一起,这意味着,例如我会按f(a,b)(c,d)
,f
,a
,b
,f(...)
,c
,{{1}的顺序对d
进行评估其中g(...)
是g
的结果。