功能绑定和函数调用评估

时间:2014-08-07 10:44:07

标签: sml smlnj

我在理解SML中的函数绑定和函数调用的评估时遇到了一些麻烦。

函数绑定和函数调用的简单示例:

val w = 12;

fun pow(x:int,n:int) = 
    if n = 0 
    then 1 
    else x * pow(x,n-1)

pow((1+1),3);


一点理论:

形式参数 - 方法中用于表示调用者传递给方法的值的标识符。                     在上面的函数绑定中,形式参数是x和n。

实际参数 - 调用者传递给方法的实际值。                     在下面的函数调用中,实际参数是(1 + 1)和3。



我的两个问题:

1.)当我们键入检查函数绑定时,我们在静态环境中存储早期声明的类型,函数参数的类型和函数类型,所以它看起来像这样:

[w=int, x=int, n=int, pow=int*int->int]

现在进行评估。它说here(在幻灯片6上)变量“pow”被添加到动态环境中。我对此有点困惑。它不应该存储整个功能绑定,所以动态环境看起来像这样吗?

[pow = whole function body]


2.)当我们调用上面的函数时,我们将实际参数(1 + 1)和3传递给pow函数。我已经读过,在评估这些表达式(1 + 1 = 2和3 = 3)之后,将分配值 到形式参数。如果将值分配给形式参数,那么实际使用哪种类型的参数来评估函数调用?根据定义,形式参数与此无关。

提前感谢您的帮助。

编辑:找到page,表示已将评估的实际参数分配给方法定义中的形式参数。

1 个答案:

答案 0 :(得分:0)

  1. 向环境添加“pow”与将其名称绑定到其值(即函数本身)相同。

  2. 基于某些关于Java的文档推理SML的评估模型没有多大意义,但在这种情况下,您可能会说在评估函数体时,形式参数的名称必然会被绑定到环境中实际参数的值。