On 1/4/06, Luke Palmer <[EMAIL PROTECTED]> wrote: > Of course, this was introduced for a reason: > > sub min($x,$y) { > $x <= $y ?? $x !! $y > } > sub min2($x, $y) { > if $x <= $y { return $x } > if $x > $y { return $y } > } > > In the presence of junctions, these two functions are not equivalent. > In fact, it is possible that both or neither of the conditionals > succeed in min2(), meaning you could change the order of the if > statements and it would change the behavior. This is wacky stuff, so > we said that you have to be aware that you're using a junction for > "safety". > > But now I'm convinced, but I've failed to convince anyone else, that > the behavior's being wacky doesn't mean that it should be declared, > but that the behavior is just plain wrong. I figure that if something > says it's totally ordered (which junctions do simply by being allowed > arguments to the <= function), both of these functions should always > be the same. The fact is that junctions are not totally ordered, and > they shouldn't pretend that they are.
To me, this implies that junctions don't have a complete definition. Either they're ordered or they're not. Either I can put them in a <= expression and it makes sense or I can't. If it makes sense, then that implies that if $x <= $y is true, then $x > $y is false. Otherwise, the definitions of <= and > have been violated. And, if I can't put them in a <=, then Perl should complain very loudly, just as if I put something else that shouldn't be put into <=, like a Person object. If I call min() or min2() with a Person object and an array, I should expect loud complaints from the runtime. If a junction cannot behave itself in a numeric comparison, then similar complaints should be made. Rob