I saw a really confusing statement when I read OMOHUNDRO's article about balltree construction algorithms:
--...
if pq.empty or else
btm.bvol <= pq.top.bvol then done:=true
--...
I don't know how could an 'else' follows 'or' and there is empty after the 'or'. could someone reorganize it and explain the branches of this statement?
The and
and or
operators in Eiffel are eager: they will evaluate both operands.
Meanwhile, and then
and or else
are the corresponding short-circuiting operators. They will cease evaluation as soon as the result of the boolean expression is known.
In the example given, if pq.empty
is true, btm.vol <= pq.top.bvol
will not be evaluated, since the result of the expression is already known to be true, regardless of the value of the second comparison.