S03 describes ^^ as a "short‐circuit exclusive‐or" operator which returns true if & only if exactly one operand is true, short circuiting after encountering two true values. However, this definition is only consistent with the mathematical definition of XOR when the operation is being performed on no more than two operands, yet ^^ has list associativity, implying that the Synopsis's specification applies regardless of how many expressions are being XORed together at once. Moreover, assuming that S03's definition only refers to XOR with two operands would make the specification seem very poorly written, and short-circuiting would not accomplish anything at all.

Under the mathematical definition, a series of boolean values chained together (for lack of a better term) with XOR associate such that the result of a single XOR pairing is passed as an operand to the adjacent XOR. (Because XOR is associative in the mathematical sense, treating it as either left-associative or right-associative will always produce the same result.) It can be shown that the truth of the entire expression is *not* equivalent to whether there is exactly one true operand but rather to whether the number of true operands is odd (cf. "1 ^ 1 ^ 1" in C or Perl 5). Thus, in order to determine the truth value of such a series, the truth value of *every* operand needs to be evaluated, and so it is impossible to short-circuit. (Interestingly, assuming that it processes two operands at a time, the reduce operator [^^] implements XOR correctly for more than two operands, even if plain ^^ does not.) An operator which returns true if & only if exactly one of its operands is true would be a separate operation entirely; the closest thing I can find in mathematics (OK, on Wikipedia) is the minimal negation operator <http://en.wikipedia.org/wiki/Minimal_negation_operator > when its arguments have been mapped through a logical NOT.


This problem also applies to the description of the "xor" operator, though not to the bitwise XOR operators, as they make no claims to unorthodox behavior and the proper behavior can be inferred from the fact that they are left-associative. The appropriateness of the ^ junctive operator is less clear, however; while the synopses don't seem to refer to it as an exclusive-or operation (though I could be wrong about that), and its list associativity allows it to be viewed as wrapping a "one()" function around all of its operands, its similarity in spelling to ^^ and the bitwise XOR operators (especially the historical one) could be problematic.

To summarize: either bring ^^ and xor with more than two operands in line with the mathematical definition (possibly by just making them left-associative and rewriting the descriptions to match), or stop calling them "exclusive or."

-- Minimiscience

Reply via email to