clarification on single assignment

Robert Virding <>
Thu Nov 23 12:00:56 CET 2000

>    Martin> But Erlang doesn't even have assignment in the first
>    Martin> place!  '=' means match, which binds unbound variables.
>The record syntax goes a long way towards implying assignment 
>   Variable#type{name = value}
>I don't see how that can be explained in terms of pattern
>matching without digging into how it's actually implemented.
>(Not posted to the mailing list because I don't want to start a
>discussion about records. There might still be people out there who
>don't know about them ;-)

I'll send my reply there so that they find out, also the the reply 
might be interesting.  Anyway it's good with traffic in 


    Variable#type{name = value}

really means is, of course, create a new record of type #type which is 
a copy of Variable except for the field 'name' which has a new value.

I will admit, however, that the syntax for record updates and matches in
general does look a lot like assignments in most languages.  I will also
admit that most uses of match are for assignment, or at least a
destructuring assignment, i.e. you pull the value apart and assign
variable to parts of it.  That is why the compiler warns.

I personally don't miss being able to reassign variables, but that
probably is dew to that I have not had it for so long that it is not
something I think about.  It is only important when it changes.  Like on
which side of the road you drive.


More information about the erlang-questions mailing list