====================================================================
Segment examples
====================================================================

The Segment domain provides a generalized interval type.

Segments are created using the .. construct by indicating the
(included) end points.

  s := 3..10
    3..10
                             Type: Segment PositiveInteger

The first end point is called the lo and the second is called hi.

  lo s
    3
                             Type: PositiveInteger

These names are used even though the end points might belong to an
unordered set.

  hi s
    10
                              Type: PositiveInteger

In addition to the end points, each segment has an integer "increment".
An increment can be specified using the "by" construct.

  t := 10..3 by -2
    10..3 by - 2
                              Type: Segment PositiveInteger

This part can be obtained using the incr function.

  incr s
    1
                              Type: PositiveInteger

Unless otherwise specified, the increment is 1.

  incr t
    - 2
                              Type: Integer

A single value can be converted to a segment with equal end points.
This happens if segments and single values are mixed in a list.

  l := [1..3, 5, 9, 15..11 by -1]
    [1..3,5..5,9..9,15..11 by - 1]
                               Type: List Segment PositiveInteger

If the underlying type is an ordered ring, it is possible to perform
additional operations.  The expand operation creates a list of points
in a segment.

  expand s
    [3,4,5,6,7,8,9,10]
                               Type: List Integer

If k > 0, then expand(l..h by k) creates the list [l, l+k, ..., lN]
where lN <= h < lN+k.  If k < 0, then lN >= h > lN+k.

  expand t
    [10,8,6,4]
                               Type: List Integer

It is also possible to expand a list of segments.  This is equivalent
to appending lists obtained by expanding each segment individually.

  expand l
    [1,2,3,5,9,15,14,13,12,11]
                                Type: List Integer

See Also:
o )help UniversalSegment
o )help SegmentBinding
o )show Segment

