Matching elements of records

Robert Virding <>
Thu Nov 4 00:05:56 CET 2004


Seeing people have been referring to me I might enter the argument as well. 
:-)

Firstly, it doesn't really matter the meaning is the same either way. It is 
just a matter of choosing the style which seems clearer to you.

I prefer [X|Y] = Z because that to my Erlang eyes is a match and I am using 
in within a match, so for me it seems more consistent. A match within a 
match within a match ... I like consistency.

Now unfortunately I don't think you can fix the order even if you would want 
to and could decide which direction. Do I hear some say "backwards 
compatibility". The problem is that the syntax is much more flexible than 
just

    <pat> = <var> or <var> = <pat>

As Joe mentioned in an earlier mail you can do <pat> = <var> = <pat>.  You 
can in fact use the syntax anywhere within a pattern not just at the top 
level. So for example you can have

    [a|[b|X]=Y]
    {a,X,[A,B={I,J,K},C]=Y,e}

It is truly the ultimate "have your cake and eat it" of matching. Actually 
it was easier to implement in the general case than to special case it. If 
it hasn't been changed.

Robert

----- Original Message ----- 
From: "Richard A. O'Keefe" <>
To: <>; <>
Sent: Tuesday, November 02, 2004 3:22 AM
Subject: Re: Matching elements of records


> Bjorn Gustavsson <> wrote:
> Why would you want a matching in head look like it was an assignment
>
>         X = [Y|Ys]
>
> in a body?
>
> Because it *IS* an assignment in a head, of course.
> In both cases, the topic, the thing being introduced,
> the thing you push onto your personal working memory because you
> think you will need it again, is the variable that is being bound.
>
> 




More information about the erlang-questions mailing list