Maxima Function
xreduce (F, s)
xreduce(F,s,s_0)
Extends the function F to an n-ary function by composition,
or, if F is already n-ary, applies F to s.
When F is not n-ary, xreduce is the same as lreduce.
The argument s is a list.
Functions known to be n-ary include
addition +, multiplication *, and, or, max,
min, and append.
Functions may also be declared n-ary by declare(F, nary).
For these functions,
xreduce is expected to be faster than either rreduce or lreduce.
When the optional argument s_0 is present,
the result is equivalent to xreduce(s, cons(s_0, s)).
Floating point addition is not exactly associative; be that as it may,
xreduce applies Maxima's n-ary addition when s contains floating point numbers.
Examples:
xreduce applied to a function known to be n-ary.
F is called once, with all arguments.
(%i1) declare (F, nary); (%o1) done (%i2) F ([L]) := L; (%o2) F([L]) := L (%i3) xreduce (F, [a, b, c, d, e]); (%o3) [[[[[("[", simp), a], b], c], d], e]
xreduce applied to a function not known to be n-ary.
G is called several times, with two arguments each time.
(%i1) G ([L]) := L; (%o1) G([L]) := L (%i2) xreduce (G, [a, b, c, d, e]); (%o2) [[[[[("[", simp), a], b], c], d], e] (%i3) lreduce (G, [a, b, c, d, e]); (%o3) [[[[a, b], c], d], e]