Mike Guy <[EMAIL PROTECTED]> wrote:
> Leopold Toetsch <[EMAIL PROTECTED]> wrote
>> dropping bitwise xor, and including "undef xor undef" reveals that Perl5
> has a different opinion then Parrot (or Perl6?).
> inline op xor(out INT, in INT, in INT) :base_core {
> $1 = ($2 && ! $3) ? $2 : ($3 && ! $2) ? $3 : 0;
> goto NEXT();
> }
>> We need language lawyers ;)
> IANAL, but I am a mathematician. Because C<xor> necessarily always
> depends on *both* its arguments, analogies with C<and> and C<or> are
> inappropriate. C<xor> cannot short-circuit, and it is not sensible
> to return as result either of the arguments.
C<xor> can't of course be short-circuit and above code isn't. Both values
are evaluated WRT trueness, always.
> ... So the above macro is misguided nonsense.
Not quite. It gives one value if one is true or 0 (false). This is more
information then the perl5 implementation returns. The returned value (if
any) is still true but usable, if I just want one of both. Well that's
"logical xor" - not binary xor.
> Perl5 C<xor> always returns a "standard" boolean value, i.e.
> dualvar(0, '') or dualvar(1, '1'). Perl6/Parrot should do the same
> thing.
Maybe, IANAL.
> Mike Guy
leo