[ Arithmetic | Reference Manual | Alphabetic Index ]

# sum(+Vector, -Result)

Computes the sum of the elements of Vector, or the scalar product of two vectors

Vector
  A list, array or vector expression, or a product of those.
Result
  Output: number.

## Description

This predicate is used by the ECLiPSe compiler to expand evaluable arithmetic expressions. So the call to sum(Vector, Result) is equivalent to

        Result is sum(Vector)

which should be preferred.

A vector is a list, an array, or a collection expression (as accepted by eval_to_list/2), whose elements are numbers.

If Vector is a single vector, then Result is the sum of its elements.

If Vector is of the form V1*V2, where V1 and V2 are vectors, then Result is the sum of the pair-wise products of the vector elements (scalar product). If V1 and V2 are of different size, the missing elements are considered to be zero.

If the vector elements are of different number types, then contagion rules apply, i.e. the result is of the widest type that occurs among the vector elements (integer -> rational -> float -> breal).

In coroutining mode, if the list is only partly instantiated, the predicate delays until the list is complete.

### Modes and Determinism

- sum(+, -) is det

### Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

### Exceptions

(4) instantiation fault
  Vector is insufficiently instantiated (non-coroutining mode only).
(5) type error
  Vector is not a vector or product of vectors.

## Examples

    Success:
          X is sum([]).                              % gives X = 0
          X is sum([1,2,3]).                         % gives X = 6
          X is sum([1,2.0,3]).                       % gives X = 6.0

          X is sum([](1,2,3)).                       % gives X = 6

          A=[](4,5,6,7), X is sum(A[2..3]).          % gives X = 11

          X is sum([1,2,3] * [4,5,6]).               % gives X = 32

          M = []([](1,2,3), [](4,5,6), [](7,8,9)),
          X is sum(M[2,*] * M[*,1]).                 % gives X = 66

## See Also

is / 2, + / 3, eval_to_list / 2