Luke Palmer writes:
> Miroslav Silovic writes:
> > [EMAIL PROTECTED] wrote:
> > >So Pugs will evaluate that to (#f|#f), by lifting all junctions
> > >out of a multiway comparison, and treat the comparison itself as
> > >a single variadic operator that is evaluated as a chain individually.
> >
> > I think this is correct, however... this is not what I meat in my
> > comment. Note I didn't use chained comparison anywhere.
> > 
> > What I meant is that for any form with two parameters (in the example,
> > 4 < ___ and ___ < 2), aparently it's not the same whether the two
> > parameters refer to the same junction or to two equal (but distinct)
> > junctions.
> 
> Well, we see the same kind of thing with standard interval arithmetic:
> 
>     (-1, 1) * (-1, 1) = (-1, 1)
>     (-1, 1) ** 2 = [0, 1)
> 
> The reason that junctions behave this way is because they don't
> collapse.  You'll note the same semantics don't arise in
> Quantum::Entanglement (when you set the "try to be true" option).
> 
> But you can force a collapse like this:
> 
>     my $x = 4 < $j;
>     if $j < 2 { say "never executed" }

By which I mean:

    my $x = 4 < $j;
    if $x < 2 { say "never executed" }

Luke

> I'm wonding if we should allow a method that returns a junction that is
> allowed to collapse the original:
> 
>     if 4 < $j.collapse and $j.collapse < 2 {
>         say "never executed";
>     }
> 
> But that's probably not a good idea, just by looking at the
> implementation complexity of Quantum::Entanglement.  People will just
> have to learn that junctions don't obey ordering laws.
> 
> Luke
> 

Reply via email to