<div class="gmail_extra">Den 27. apr. 2012 21.12 skrev David Mercer <span dir="ltr"><<a href="mailto:dmercer@gmail.com" target="_blank">dmercer@gmail.com</a>></span>:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On Apr 23, 2012, at 19:06, "Richard O'Keefe" <<a href="mailto:ok@cs.otago.ac.nz">ok@cs.otago.ac.nz</a>> wrote:<br>
<br>
><br>
> On 24/04/2012, at 10:52 AM, Robert Virding wrote:<br>
><br>
>> I have missed one part of the discussion here and that is about ?=:<br>
>> why use ?= in a guard and not =, and what does ?= mean outside a<br>
>> guard?<br>
</div>. . .<br>
<div>>    The problem now is that EITHER<br>
>    f(X) when X = [] -> ...<br>
>> f([])<br>
>    fails (because the match X = [] succeeds but has value [] which is<br>
>    taken as false in a guard) OR the behaviour of = in a guard is<br>
>    inconsistent with its behaviour in an expression.</div></blockquote><div><br>Funny thing: I don't even know what kind of expressions the list comprehension guards are, and thus which of the rules would apply. As far as I can tell with a browser but not an Erlang shell within reach, LC filters can be all kinds of expression (i.e. not restricted to guard expressions), although they appear in a guard-ish context. I think that's a very good reason not to let the meaning of '=' depend on the context.<br>
</div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="im">
<br>
</div>Why not<br>
> f(X = []) -> …<br>
<br>
or<br>
> f(X) when X =:= [] -> …<br>
<br>
?<br></blockquote><div>Because Richard's example wasn't an illustration of "why do we need this feature?", but of "why won't this syntax work?".<br></div>This particular example can, as you point out, be expressed quite well using current Erlang.<br>
The main features of the operator candidate are pattern matching in guards, and bindings from guards.<br><br>I hope this clarifies things.<br><br>/Erik<br></div></div>