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

- S: Type
- A: Join(LinearAggregate S, finiteAggregate)
- R: Type
- B: Join(LinearAggregate R, finiteAggregate)

`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), ...]`

.