Matching elements of records

Vlad Dumitrescu <>
Fri Oct 29 08:37:48 CEST 2004


From: "Richard A. O'Keefe" <>
>     To me it is simply inconsistent to bind X in the body of a function
>     by writing
> X = [Y|Ys]
>     and then to turn around and do the exact OPPOSITE in the head of
>     a function by writing
> [Y|Ys] = X

Hi,

Without trying to pretend I know more than you, Richard, there is one thing that
I'd like to point out (which might or might not invalidate your point).

As I see it, the alternatives are these:

a) f(X = [Y|Ys]) -> ...

b) f([Y|Ys] = X) -> ...

c) f(X) ->
    [Y|Ys] = X, ...

d) f([Y|Ys]) ->
    X = [Y|Ys], ...


Alternatives a and d are consistent with each other, and in line with your
preferences.
Alternatives b and c are consistent with each other, and in line with Robert's
preferences.

However, alternative d seems a little strange and there's something unnatural
about it. The match follows the "heavy constituent comes later" rule, but the
function as a whole doesn't (argument name should have come first). And I think
when it comes to readability, the function as a whole is more important to
follow the rule.

That said, I too would like to have a separate operator for record field
definition.

regards,
Vlad



More information about the erlang-questions mailing list