misc::genassop -- generates an
n-ary associative operator from a binary one
Introductionmisc::genassop(binaryop, zeroelement)
generates an n-ary associative operator from the binary operator
binaryop, where zeroelement is a neutral
element for binaryop.
Call(s)misc::genassop(binaryop, zeroelement)
Parametersbinaryop |
- | a function |
zeroelement |
- | an object |
Returnsmisc::genassop returns a procedure f. That
procedure accepts an arbitrary number of arguments of the same kind
binaryop does; it returns zeroelement if it
is called without argument, and its only argument if it is called with
one argument; its value on n arguments is inductively
defined by f(x1, ..., xn)=f(binaryop(x1,x2),
x3,...,xn).
Related
Functions
Detailsbinaryop must be a function taking two arguments (no
matter of what kind) and returning a valid argument to itself. It must
satisfy the associative law
binaryop(binaryop(a, b), c) =
binaryop(a, binaryop(b, c)).zeroelement is an object such that
binaryop(a, zeroelement) = a holds for every
a.misc::genassop returns a procedure which returns
zeroelement if it is called without arguments and the
argument if it is called with one argument.misc::genassop doesn't check whether
binaryop is really associative and whether
zeroelement is really a neutral element for
binaryop.
Example
1We know that _plus is an n-ary operator anyway, but
let us assume that _plus
was only a binary operator. We can create an own n-ary addition as
follows:
>> myplus := misc::genassop(_plus, 0)
proc genericAssop() ... end
Now we make myplus add some values.
>> myplus(3, 4, 8), myplus(-5), myplus()
15, -5, 0
As mentioned in the ``Details'' section,
myplus returns the argument if is called with exactly one
argument, and it returns the zeroelement 0 if
it is called without arguments.