Sean Allen <>
Sat Jul 19 16:21:08 CEST 2008

```On Jul 19, 2008, at 9:50 AM, 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.

Actually its about 49 pages later where short circuit booleans are
discussed
and 37 pages for boolean expressions. *).

How is ' f(X) when (X == 0) or (1/X > 2)' and or if it fails for 0?
What is the difference at that point between and/or. I cant find
anything really
detailed on that.

Is or equivalent to , and orelse equiv to ;?

That is the only way this makes any sense to me. Except that well

--

page 94... boolean expressions:

3> true or false
true
4> (2 > 1 ) or ( 3 > 4 )
true

makes sense.

still cant wrap my head around given the above... why....

f(X) when (X == 0) or (1/X > 2)

fails.

does it fail because it would be a divide by zero?

if yes, why does this also fail with divide by zero?

(X == 0) orelse (1/X > 2)

and why wouldnt the g(X) guard fail?

and lord so confused... why are both of these true then:

1> X=1.
1
2> ( X == 1 ) or ( 1/X > 2 ).
true
3> ( X == 1 ) orelse ( 1/X > 2 ).
true

the above... that makes sense to me. those guards...
totally lost. TOTALLY.

```