[erlang-questions] style question - best way to test multiple non-guard conditions sequentially

Jonathan Leivent <>
Thu Jun 20 18:27:25 CEST 2013


On 06/20/2013 11:42 AM, Anthony Ramine wrote:
> Because changing it at this point would be weird. And because guards have special semantics and can't fail.
>
> Supporting expressions now would mean weird semantics like in comprehensions, where you can't distinguish a guard from an expression and know that they are compiled differently, or breaking existing code such as "if length(X) =:= 3 -> ... ; ... end": if X is not a list and that expression is evaluated with guard semantics, the first clause is skipped, whereas if it is evaluated with expression semantics, the code crashes.
>

OK - that is surprising.  That certainly changes my thinking about if 
statements.  Is this particular semantic difference between guards and 
general conditions ever expressed in the reference manual?  If so, I 
certainly missed it.

If I had read some code that just said:

   if length(X) =:= 3 -> ...

I would have inferred (incorrectly) that it would be an error for X to 
not be a list.

> If I understood things correctly, Erlang is supposed to have a cond Clauses end expression —try to evaluate "cond" in Erlang, it's a syntax error because cond is a reserved keyword—, which is the same as if but with tests compiled with expression semantics. Maybe it should be implemented for real.

Perhaps that is a remnant of "the long-ago-proposed 'cond' form" that 
Richard mentioned.

-- Jonathan




More information about the erlang-questions mailing list