New EEP draft: Pinning operator ^ in patterns

Stefan Reichör stefan@REDACTED
Mon Jan 18 15:19:53 CET 2021


Loïc Hoguin <essen@REDACTED> writes:

> On 18/01/2021 11:53, Stefan Reichör wrote:
>> Hallo Loïc,
>>
>> I am a newcomer to Erlang. I am subscribed to this list since a few
>> days. I am really positively surprised how active the Erlang community is.
>
> The list is usually not that active.

I would love to see it active ;-)

>>> Being able to write "A = 5, A = inc(4)." is what makes the Erlang language the best I've used in my opinion.
>>
>> Could you please explain the semantics of this statement?
>> It is not obvious for me as a beginner.
>>
>> Why is such a statement so useful for you?
>
> "A = 5,"
>
> means the variable A becomes bound and has the value 5.
>
> Followed by
>
> "A = inc(4),"
>
> where it is implied that "inc(X) -> X + 1."
>
> Because A is already bound, this becomes a match. The match will only succeed if the value returned by the inc/1 function is
> the same as the value already bound to A.
>
> If the inc/1 function had a bug and somehow returned the wrong value, the match will fail.

Thanks for the explaination. Now I understand the meaning of this code.

You use the bound variable and the following match like an assertion.

> It's not so much about usefulness and more about a thought process. All instances of A must have the same value as the first
> time it was "matched" otherwise the program doesn't work. In my mind, there is no real distinction between binding and
> matching, it's all just matching. The first match just happens to dictate what the value must be subsequently. Having to
> annotate explicitly the matching of bound variables would be a pretty big change to that thought process, so the rewards would
> have to be really worth it.
>
> It's similar to the introduction of maps in the language except maps greatly simplified many things we routinely do. The
> rewards were far greater than the costs of adapting the thought process.
>
> Have fun with Erlang, it's the best!

I hope that I will get into the language soon. I am impressed by the
BEAM, especially its capabilities to run processes in parallel.

However I am used to do a lot of programming in Python. I have a very
efficient development process with Python.

I am not sure how I will get to a similar efficiency in Erlang.
Perhaps I will get back to this list with some questions one day.



Stefan.


More information about the erlang-questions mailing list