To: J3 J3/16-187
From: Dan Nagle
Subject: remove commutative from co_reduce
Date: 2016 May 18
Discussion
REDUCE was added to provide an array-based version of CO_REDUCE.
REDUCE originally had a requirement that the OPERATOR function
must implement a mathematically commutative operation.
This requirement was removed to allow useful but not commutative
operations.
The edits following remove the "must be commutative" requirement
for the OPERATOR function of CO_REDUCE to bring it into line
with REDUCE. No ordering options are provided, as there doesn't
appear to be a "natural" order to enforce. An optional note
is suggested to emphasize the consequences of non-commutative
operations.
Edits:
In 13.9.49 CO_REDUCE
[363:33-34] Change "commutative and associative"
to "associative"
{remove the requirement}
[364:12+] optionally, add a note
"Note 13.9+
When the OPERATOR function is not mathematically commutative,
the program may potentially produce any of several results,
corresponding to different orders of operations. By using
a non-commutative operator function, the program asserts that it is
able to continue computing correctly with any possible result."
{note describes the consequences of non-commutative operators}