# FiniteLinearAggregateFunctions2(S, A, R, B)ΒΆ

`FiniteLinearAggregateFunctions2` provides functions involving two FiniteLinearAggregates where the underlying domains might be different. An example of this might be creating a list of rational numbers by mapping a function across a list of integers where the function divides each integer by 1000.

map: (S -> R, A) -> B

`map(f, a)` applies function `f` to each member of aggregate `a` resulting in a new aggregate over a possibly different underlying domain.

reduce: ((S, R) -> R, A, R) -> R

`reduce(f, a, r)` applies function `f` to each successive element of the aggregate `a` and an accumulant initialized to `r`. For example, `reduce(_+\\$Integer, [1, 2, 3], 0)` does `3+(2+(1+0))`. Note: third argument `r` may be regarded as the identity element for the function `f`.

scan: ((S, R) -> R, A, R) -> B

`scan(f, a, r)` successively applies `reduce(f, x, r)` to more and more leading sub-aggregates `x` of aggregrate `a`. More precisely, if `a` is `[a1, a2, ...]`, then `scan(f, a, r)` returns `[reduce(f, [a1], r), reduce(f, [a1, a2], r), ...]`.