<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">An alternative notation is that of or-patterns. Here from OCaml:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">type foo = A | B | C | D<br><br>let is_frac x = match x with<br>    A | B | C -> true<br>    | _ -> false<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Abusing erlang notation, you would write something like</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">is_frac(a);</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">is_frac(b);</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">is_frac(c) -> true;</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">is_frac(_) -> false.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">for this variant. As for a hint why you would prefer an or-pattern over list membership in a typed language, consider the compilation of</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">let is_frac x = match x with<br>    A | B | C | D -> true<br>    | _ -> false<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">This returns a warning: "Warning 11: this match case is unused." because the latter wildcard match on _ can never be reached.<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 25, 2019 at 3:27 PM Loïc Hoguin <<a href="mailto:essen@ninenines.eu">essen@ninenines.eu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I would second this. It would be great to be able to say "when Val in <br>
[a, b, c]" and that be translated to "when Val =:= a; Val =:= b; Val =:= <br>
c" automatically. It's just nicer to read and write.<br>
<br>
And since strings are lists this would also work: 'when Val in <br>
"=!~._-"'. I have a lot of HTTP parsing code that would benefit from <br>
such a construct.<br>
<br>
I suppose "when Val in [a, b, c], Flag =:= true" would have to be <br>
translated as "Val =:= a, Flag =:= true; Val =:= b, Flag =:= true; Val <br>
=:= c, Flag =:= true" as well, due to how ;/, work in guards.<br>
<br>
Cheers,<br>
<br>
On 23/03/2019 04:24, Florent Gallaire wrote:<br>
> Hello everybody,<br>
> <br>
> I'm not very experimented in Erlang but I read carefully books and<br>
> official documention.<br>
> <br>
> It seems to me that the guards syntax is not as good as it should be,<br>
> i.e. too much verbose for multiple values.<br>
> <br>
> do(val1) -> val1;<br>
> do(val2) -> val2;<br>
> do(val3) -> val3;<br>
> do(val4) -> val4;<br>
> do(val5) -> val5.<br>
> <br>
> do(Val) when Val =:= val1; Val =:= val2; Val =:= val3; Val =:= val4;<br>
> Val =:= val5 -> Val.<br>
> <br>
> It's boring and error prone to write.<br>
> <br>
> Has a "in tuple" syntax already be considered ? Something like :<br>
> <br>
> do(Val) when Val in {val1, val2, val3, val4, val5} -> Val.<br>
> <br>
> Cheers<br>
> <br>
> Florent<br>
> <br>
<br>
-- <br>
Loïc Hoguin<br>
<a href="https://ninenines.eu" rel="noreferrer" target="_blank">https://ninenines.eu</a><br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature">J.</div>