我正在学习决赛,我在这里遇到了练习题。
问题要求
的结果val y = ref 1;
fun f x = (!y) + (x + x);
(f (y := (!y)+1; !y)) + (!y);
在以下参数传递技术下:
在我看来,按价值来看,答案是8。 但是,我相信按姓名打电话的答案也是8,但我希望它会有所不同。我认为它是8的原因:
这是正确的答案,如果没有,有人可以指出我哪里出错了吗?此外,有人可以向我解释在这种情况下,需求呼叫是如何工作的吗?
非常感谢。
答案 0 :(得分:1)
我发现它是如何运作的:
(y := (!y)+1; !y)
是传递给f的参数。
f
然后看起来像:
fun f x = (!y) + ((y:= (!y)+1; !y) + (y:= (!y)+1; !y));
所以这最终为1 + 2 + 3,最后一步+ (!y)
增加3,因为这是y的当前值,给出了9。
感谢您指出我仍在按价值调用。