拥有foo(bar1(), bar2())
之类的内容我可以确定在SML中它会始终首先评估bar1()
并在bar2()
后评估吗?
答案 0 :(得分:2)
是。严格来说,你有一个应用于元组的函数。从左到右评估元组的字段,因此 bar1()将在 bar2()之前进行评估。请参阅Milner,Tofte,Harper和MacQueen第41页的“标准ML的定义(修订版)”。
请注意,如果 foo 实际上是一个可能有副作用或引发异常的表达式,它将在其参数之前进行评估,因此在 bar1()之前或 BAR2()的。这特别影响了咖喱的应用。
foo (bar1()) (bar2())
在评估 bar2()之前,先评估 bar1()然后 foo(bar1value)。