在SML中设置等于另一个引用的引用

时间:2014-03-07 17:52:21

标签: pointers reference functional-programming sml

是否可以在SML中更新等于另一个引用的引用?这可能是一个非常愚蠢的问题,但我似乎无法理解它。例如,请考虑以下两个引用:

val x1 = ref(NONE);
val x2 = ref(NONE);

(*update so that x1 = x2; returns true*)

如何将x1更新为等于x2。我不是在谈论将x2指向的内容放入x1,我想知道我是否可以将它们设置为相等,所以当我测试相等性时(eq x1 = x2),结果为真。

我想过让他们指向一个新的记忆位置。

val z = NONE
x1 := z
x2 := z

这不起作用。我猜我应该再次检查SML中的引用。谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

ML中没有赋值给变量。因此,以两个不同值开头的两个变量永远不会相等。 ref NONE计算指向新的可变引用对象的指针;因此,对ref的两次调用将评估指向不同对象的指针。

这是一个参考并不真正相关。它与任何其他类型相同:

val x1 = 2;
val x2 = 3;
(*update so that x1 = x2; returns true*)

x1 = x2永远不会成真。 (至少不是那个x1和那个x2;如果你定义一个新的x1,那就是另一个故事。)

答案 1 :(得分:0)

我知道你可以有两个参数相同的唯一方法是它们是否相同:

val x1 = ref NONE
val x2 = x1

将导致x1 = x2为真。