==================================================================== Segment ==================================================================== 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: * )help UniversalSegment * )help SegmentBinding * )show Segment