The SML Basis Library defines both polymorphic and monomorphic arrays and vectors. Arrays are mutable sequences, while vectors are immutable. Both arrays and vectors are indexed from zero, and provide constant time access and update operations. The monomorphic types are expected to have more compact representations than the corresponding polymorphic types. For example, a
BoolVector implementation might use one bit per element.
A number of the array and vector operations take an array or vector slice as an argument. A slice is specified as a triple of type
(seq * int * int option), where seq is the sequence type (array or vector). The expression
(seq, i, SOME n) specifies the elements in seq from position i to i + (n - 1) (inclusive). When NONE is supplied as the third argument, the length is taken to be |seq| - i (i.e., the rest of seq from position i on). A slice is said to be valid if
0 <= i <= i+n <= |seq|where n is the length of the slice. Note that when the length is specified as NONE this requirement reduces to 0 <= i <= |seq|.
Note that when NONE is used to specify the length, the number of range checks can be reduced.
Last Modified April 16, 1996
Comments to John Reppy.
Copyright © 1997 Bell Labs, Lucent Technologies