[erlang-questions] Reading, Learning, Confused

Alpár Jüttner <>
Sat Jul 19 16:31:12 CEST 2008


Btw. the Erlang Reference Manual says that

        As of Erlang 5.5/OTP R11B, short-circuit boolean expressions are
        allowed in guards. In guards, however, evaluation is always
        short-circuited since guard tests are known to be free of side
        effects.
        (Section 6.14, Short-Circuit Boolean Expressions)

Something is wrong here, isn;t it?

Regards,
Alpar

On Sat, 2008-07-19 at 06:50 -0700, Lev Walkin wrote:
> Sean Allen wrote:
> > by a small bit of example code in Programming Erlang related to guards  
> > and short circuit booleans:
> > 
> >   f(X) when (X == 0) or (1/X > 2) ->
> >      ...
> > 
> > g(X) when (X == 0) orelse ( 1/X > 2) ->
> >     ...
> > 
> > The guard in f(X) fails when X is zero but succeeds in g(X)
> > 
> > Can someone explain why?
> 
> 
> Sean,
> 
> The thing is, "or" does not short-circuit evaluation when left side
> succeeds, whereas "orelse" does. Same short-circuit logic is
> behind the differences between "and" and "andalso".
> 
> Actually, the very book you read explains these differences and warns
> about caveats a couple pages later (or earlier). Don't stop reading.
> 




More information about the erlang-questions mailing list