All~

On Wed, 09 Feb 2005 22:48:00 +0000, Matthew Walton
<[EMAIL PROTECTED]> wrote:
> Matt Fowles wrote:
> > 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()
> 
> This is Just Wrong, IMO. How confusing is it going to be to find that
> calling is_prime($x) modifies the value of $x despite it being a very
> simple test operation which appears to have no side effects?
> 
> As far as I can see it, in the example, it's perfectly logical for
> is_prime($x), is_even($x) and $x > 2 to all be true, because an any()
> junction was used. If an all() junction was used it would be quite a
> different matter of course, but I would see is_prime() called on an
> any() junction as returning true the moment it finds a value inside that
> junction which is prime. It doesn't need to change $x at all.
> 
> In a way, you're sort of asking 'has $x got something that has the
> characteristics of a prime number?' and of course, $x has - several of
> them, in fact (but the count is not important).

Soemtimes, although frequently I will check for preconditions at the
begining of a function. After I finished checking for them, I expect
to be able to do stuff assuming them without anyworry of exceptions or
anything else.  In these cases I am using conditionals to filter
input, which I imagine is a fairly common case...

Matt
-- 
"Computer Science is merely the post-Turing Decline of Formal Systems Theory."
-???

Reply via email to