我正在准备期末考试,这里有一个练习题。
问题询问结果
val y = ref 1;
fun f x = (!y) + (x + x);
(f (y := (!y)+1; !y)) + (!y);
在以下参数传递技术下:
- 按值调用
- 叫名字
- 需要时来电。
在我看来,按值调用的答案是 8。但是,我相信按名称调用的答案也是 8,但我希望它会有所不同。我认为是8的原因:
- y := (!y)+1 将 y 取消引用为 1,加 1,然后将 y 设置为 2
- 第 3 行中的 !y 用作 f 的参数,并且由于它正在被取消引用,因此它作为值而不是作为引用传递(这可能是我出错的地方?)
- 函数调用返回 6,但没有设置 y,因为 y 是作为上一步中的值传入的
- 将 6 添加到 y 的取消引用值,即 2。
- 这返回 8
这是正确的答案吗,如果不是,有人可以指出我哪里出错了吗?另外,有人可以向我解释一下在这种情况下需要调用如何工作吗?
非常感谢。