>For example, suppose you often want to match [{opt,X}].<br>>Then you will one day be able to write<br>><br> >      #one_opt(X) -> [{opt,X}].<div><br></div><div><br></div><div>Your 'abstract pattern' looks like macro!</div>
<div><br></div><div><br><br><div class="gmail_quote">On Tue, Dec 6, 2011 at 7:08 AM, Richard O'Keefe <span dir="ltr"><<a href="mailto:ok@cs.otago.ac.nz">ok@cs.otago.ac.nz</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
On 5/12/2011, at 3:57 PM, Daniel Dormont wrote:<br>
<br>
> In my experience with Erlang so far, this is perhaps the weirdest<br>
> feature for me from a language standpoint. I understand the<br>
> motivations, but at least from where I sit, it's a weird mental leap<br>
> from there to "we allow these few functions, but not others."<br>
<br>
</div>In old Erlang, it was a lot clearer: the things that were allowed in<br>
guards were almost all things that were not allowed anywhere else.<br>
For example X < Y was allowed as a guard but not as an expression.<br>
<br>
To this day, I stick with "," and ";" in guards, reserving<br>
"andalso" and "orelse" for expressions (and trying to avoid those).<br>
<div class="im"><br>
> In fact,<br>
> not even all of the allowed functions are "pure" in the sense that,<br>
> say, a Haskell programmer would recognize. I'm specifically thinking<br>
> of node/0 and self/0.<br>
<br>
</div>self() cannot change in a process.<br>
I don't believe node() can change either, but I could be wrong.<br>
<br>
> What are abstract patterns?<br>
<br>
Functions are abstractions of expressions.<br>
Abstract patterns are abstractions of patterns.<br>
<br>
For example, suppose you often want to match [{opt,X}].<br>
Then you will one day be able to write<br>
<br>
        #one_opt(X) -> [{opt,X}].<br>
<br>
and then use #one_opt(X) wherever you would have written the pattern.<br>
The proposal has been around for years, but the OTP team have always<br>
had more urgent maddened grizzly bears to stun.<br>
<br>
</blockquote></div><br></div>