All~ On Tue, 08 Feb 2005 17:51:24 +0100, Miroslav Silovic <[EMAIL PROTECTED]> wrote: > [EMAIL PROTECTED] wrote: > > >>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" } > > > > > > > Uh, I'm not sure this does what I think you wanted to say it does. ;) $x > is a boolean, unless < returns a magical object... in which case, the > magical part of $x ought to be a reference to the original $j, no? > > >>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. > >> > >> > Well, I suspect that junctions will have to be references and just > collapse every time. Observe: > > my $x = any(1, 2, 3, 4, 5); > print "SHOULD NOT RUN" if (is_prime($x) && is_even($x) && $x > 2); > > This only works if $x collapses. Same for matching junctioned strings: > > my $a = any (<a b c>); > print "Boo!" if $a ~ /a/ and $a ~ /b/ and $a ~ /c/; > > (perhaps I meant to use ~~, I don't quite remember :) ) > > Either way, autocollapsing juntions is a Good Thing IMHO, and the only > remaining confusion (to go back to my initial post) is that the only > case that doesn't work is when you instance a junction twice as a pair > of same literals: > > print "SUCCESS, unfortunately" if (is_prime(any(1, 2, 3, 4, 5)) && > is_even(any(1, 2, 3, 4, 5)) && any(1, 2, 3, 4, 5) > 2); > > Hope I'm making sense. Been a hard day at work. ;)
What if junctions collapsed into junctions of the valid options under some circumstances, so my $x = any(1,2,3,4,5,6,7); if(is_prime($x) # $x = any(2,3,5,7) and is_even($x) # $x = any(2) and $x > 2) # $x = any() Matt -- "Computer Science is merely the post-Turing Decline of Formal Systems Theory." -???