0
我正在学习决赛,我在这里有一个练习题。打电话给价值,名称/参考,需要在ML
的问题问的
val y = ref 1;
fun f x = (!y) + (x + x);
(f (y := (!y)+1; !y)) + (!y);
在下列参数传递技术
结果:
- 打电话值
- 打电话名
- 打电话的需要。
在我看来,对于通过调用价值,答案是8 不过,我相信答案由名字叫也为8,但我希望它是不同的。其原因我认为是8:
- Y:!=(!Y)+1 derefsÝ为1,加1,然后设置y为2
- 的Y 3线作为参数来f,并且因为它被解除引用,所以 作为一个值而不是作为参考传递(这可能是我在 出错的地方?)
- 函数调用返回6,但不会设置y,因为y已通过作为来自前一步骤的值
- 6被添加到y的取消引用值中,其为2.
- 该re转8 8
这是正确的答案,如果没有,请问有人能指出我出错的地方吗?另外,有人可以向我解释在这种情况下,按需拨打电话的方式吗?
非常感谢。
看起来您正在解释如何按值处理。你是如何得到你的名称答案的? – 2014-12-07 23:33:24
我解释的过程是我对如何使用按名称工作的理解。我认为这是错误的,因为正如你所说,它看起来与按价值划分的价值完全相同,但我不知道它是怎么错的。 – 2014-12-07 23:53:07