[erlang-questions] Reading, Learning, Confused

Alpár Jüttner <>
Sat Jul 19 17:22:57 CEST 2008


>         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?

I mean

      * What does the word "however" mean here? Does it mean that if
        they are not in a guard, orelse/andelse might be non
        short-circuited?
      * How does the freedom from side effects are related to the
        short-circuited evaluation?

Regards,
Alpar

> 
> 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.
> > 
> 
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list