函数内部参数的评估顺序是什么?

时间:2014-02-05 23:03:36

标签: function sml

拥有foo(bar1(), bar2())之类的内容我可以确定在SML中它会始终首先评估bar1()并在bar2()后评估吗?

1 个答案:

答案 0 :(得分:2)

是。严格来说,你有一个应用于元组的函数。从左到右评估元组的字段,因此 bar1()将在 bar2()之前进行评估。请参阅Milner,Tofte,Harper和MacQueen第41页的“标准ML的定义(修订版)”。

请注意,如果 foo 实际上是一个可能有副作用或引发异常的表达式,它将在其参数之前进行评估,因此在 bar1()之前或 BAR2()的。这特别影响了咖喱的应用。

foo (bar1()) (bar2())

在评估 bar2()之前,先评估 bar1()然后 foo(bar1value)