Alasdair,
Here is one solution:
(1) -> )r alas1.input
mult(xs:List _expression_ Integer):_expression_ Integer == reduce(*,[x-z for z in xs])
Function declaration mult : List(_expression_(Integer)) -> _expression_(
Integer) has been added to workspace.
Type: Void
intm(xs,a,b) == integrate(mult(xs),x=a..b)
Type: Void
(3) -> mult([x1,x2])
Compiling function mult with type List(_expression_(Integer)) ->
_expression_(Integer)
2
(3) (x1 - x)x2 - x x1 + x
Type: _expression_(Integer)
(4) -> intm([x1,x2,x3],1,2)
Compiling function intm with type (List(OrderedVariableList([x1,x2,
x3])),PositiveInteger,PositiveInteger) -> Union(f1:
OrderedCompletion(_expression_(Integer)),f2: List(OrderedCompletion
(_expression_(Integer))),fail: failed,pole: potentialPole)
((- 12x1 + 18)x2 + 18x1 - 28)x3 + (18x1 - 28)x2 - 28x1 + 45
(4) -----------------------------------------------------------
12
Type: Union(f1: OrderedCompletion(_expression_(Integer)),...)
Bill Page.