abc
abc

Reputation: 11939

Usage of the ref function in ML

Considering the ref operator I'm having trouble to understand its application and the sense of the follow instructions:

1.

In this definition what am I defining?

 - val ref x=ref 9;

 val x = 9 : int

2.

and here what am I doing with ref x:= ref 12?

 - val x= ref 8;

 val x = ref 8 : int ref

 - ref x := ref 12; 

 val it = () : unit

 - x;

 val it = ref 8 : int ref

Upvotes: 3

Views: 4012

Answers (2)

Quantifier
Quantifier

Reputation: 187

@newacct, @sepp2k I see this is from several years ago, but I found the discussion useful and wanted to contribute this output from Standard ML of New Jersey v110.79 [built: Tue Aug 8 16:57:33 2017]:

- val ref x = ref 9;
val x = 9 : int

Upvotes: 0

sepp2k
sepp2k

Reputation: 370415

val ref x = ref 9 defines x to be 9 - just as if you had written val x = 9. This is because ref is a constructor, so it's pattern matching the value ref 9 against the pattern ref x, which binds x to 9. Of course writing it like this instead of just writing val x = 9 makes very little sense.

When you write ref x := ref 12, you create a new ref (of type int ref ref) that refers to x. You then immediately change that new ref to refer to ref 12 rather than to x. Since the new ref you created is never stored anywhere where you might access, this will have no observable effect.

Upvotes: 7

Related Questions