On Wed, Apr 16, 2008 at 11:19:33PM -0400, Bob Rogers wrote:
> Pardon a lurker, but I'm not sure I understand the point of this.  In:
> 
>       if $x < $y < $z { ... }
> 
> I would expect a sensible compiler short-circuit the "$x < $y" part, and
> indeed the "Chained comparisons" section of S03 (version 135) says
> 
>       A chain of comparisons short-circuits if the first comparison
>       fails . . .
> 
> But the definition of chaining associativity under "Operator precedence"
> says this is equivalent to:
> 
>       if ($x < $y) and ($y < $z) { ... }
> 
> (modulo multiple evaluation), but IIUC "and" is not short-circuiting.

"and" is short-circuiting.

>    And wouldn't it also be helpful to implement chaining in such a way
> that a specialized chained op implementation couldn't mess it up by
> returning plain True?

FWIW, PCT and Rakudo do it this way -- the chained op returns a true/false
value and doesn't have to be aware of any chaining taking place.

Pm

Reply via email to