# SegmentExpansionCategory(S, L)ΒΆ

- S: OrderedRing
- L: StreamAggregate S

This category provides an interface for expanding segments to a stream of elements.

- +: (%, S) -> %
- from SegmentCategory S
- +: (S, %) -> %
- from SegmentCategory S
- -: (%, S) -> %
- from SegmentCategory S
- =: (%, %) -> Boolean
- from BasicType
- ~=: (%, %) -> Boolean
- from BasicType
- BY: (%, Integer) -> %
- from SegmentCategory S
- coerce: % -> OutputForm
- from CoercibleTo OutputForm
- convert: % -> InputForm if S has ConvertibleTo InputForm
- from ConvertibleTo InputForm
- convert: S -> %
- from SegmentCategory S

- expand: % -> L
`expand(l..h by k)`

creates value of type`L`

with elements`l, l+k, ... lN`

where`lN <= h < lN+k`

. For example,`expand(1..5 by 2) = [1, 3, 5]`

.

- expand: List % -> L
`expand(l)`

creates a new value of type`L`

in which each segment`l..h by k`

is replaced with`l, l+k, ... lN`

, where`lN <= h < lN+k`

. For example,`expand [1..4, 7..9] = [1, 2, 3, 4, 7, 8, 9]`

.- hash: % -> SingleInteger
- from SetCategory
- hashUpdate!: (HashState, %) -> HashState
- from SetCategory
- hi: % -> S
- from SegmentCategory S
- high: % -> S
- from SegmentCategory S
- incr: % -> Integer
- from SegmentCategory S
- latex: % -> String
- from SetCategory
- lo: % -> S
- from SegmentCategory S
- low: % -> S
- from SegmentCategory S

- map: (S -> S, %) -> L
`map(f, l..h by k)`

produces a value of type`L`

by applying`f`

to each of the succesive elements of the segment, that is,`[f(l), f(l+k), ..., f(lN)]`

, where`lN <= h < lN+k`

.- SEGMENT: (S, S) -> %
- from SegmentCategory S
- segment: (S, S) -> %
- from SegmentCategory S

ConvertibleTo InputForm if S has ConvertibleTo InputForm