我在理解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,表示已将评估的实际参数分配给方法定义中的形式参数。
答案 0 :(得分:0)
向环境添加“pow”与将其名称绑定到其值(即函数本身)相同。
基于某些关于Java的文档推理SML的评估模型没有多大意义,但在这种情况下,您可能会说在评估函数体时,形式参数的名称必然会被绑定到环境中实际参数的值。