The VectorSlice structure provides an abstraction of subvectors for
polymorphic vectors. A slice value can be viewed as a triple (v, i,
n), where v is the underlying vector, i is the starting index, and n
is the length of the subvector, with the constraint that 0 <= i <= i +
n <= |v|, where |v| is the length of v. Slices provide a convenient
notation for specifying and operating on a contiguous subset of
elements in a vector.
structure VectorSlice : VECTOR_SLICE
signature VECTOR_SLICE =
sigtype 'a slice
vallength : 'a slice -> int
valsub : 'a slice * int -> 'a
valfull : 'a Vector.vector -> 'a slice
valslice : 'a Vector.vector * int * int option -> 'a slice
valsubslice : 'a slice * int * int option -> 'a slice
valbase : 'a slice -> 'a Vector.vector * int * int
valvector : 'a slice -> 'a Vector.vectorvalconcat : 'a slice list -> 'a Vector.vectorvalisEmpty : 'a slice -> bool
valgetItem : 'a slice -> ('a * 'a slice) option
valappi : (int * 'a -> unit) -> 'a slice -> unit
valapp : ('a -> unit) -> 'a slice -> unit
valmapi : (int * 'a -> 'b) -> 'a slice -> 'b Vector.vectorvalmap : ('a -> 'b) -> 'a slice -> 'b Vector.vectorvalfoldli : (int * 'a * 'b -> 'b) -> 'b -> 'a slice -> 'b
valfoldri : (int * 'a * 'b -> 'b) -> 'b -> 'a slice -> 'b
valfoldl : ('a * 'b -> 'b) -> 'b -> 'a slice -> 'b
valfoldr : ('a * 'b -> 'b) -> 'b -> 'a slice -> 'b
valfindi : (int * 'a -> bool) -> 'a slice -> (int * 'a) option
valfind : ('a -> bool) -> 'a slice -> 'a option
valexists : ('a -> bool) -> 'a slice -> bool
valall : ('a -> bool) -> 'a slice -> bool
valcollate : ('a * 'a -> order) -> 'a slice * 'a slice -> order
end
creates a slice based on the vector vec starting
at index i of the vector vec. If sz is NONE, the slice includes all of
the elements to the end of the vector, i.e., vec[i..|vec|-1]. This
raises Subscript if i < 0 or |vec| < i. If sz is SOME(j), the slice
has length j, that is, it corresponds to vec[i..i+j-1]. It raises
Subscript if i < 0 or j < 0 or |arr| < i + j. Note that, if defined,
slice returns an empty slice when i = |vec|.
creates a slice based on the given slice sl
starting at index i of sl. If sz is NONE, the slice includes all of
the elements to the end of the slice, i.e., sl[i..|sl|-1]. This raises
Subscript if i < 0 or |sl| < i. If sz is SOME(j), the slice has length
j, that is, it corresponds to sl[i..i+j-1]. It raises Subscript if i <
0 or j < 0 or |sl| < i + j. Note that, if defined, slice returns an
empty slice when i = |sl|.
returns a triple (vec, i, n) representing the concrete
representation of the slice. vec is the underlying vector, i is the
starting index, and n is the length of the slice.
These apply the function f to the elements of a slice in
left to right order (i.e., increasing indices). The more general appi
function supplies f with the index of the corresponding element in the
slice. The expression app f sl is equivalent to appi (f o #2) sl.
These functions generate new vectors by mapping the
function f from left to right over the argument slice. The more
general mapi function supplies both the element and the element's
index in the slice to the function f. The first expression is
equivalent to:
let fun ff (i,a,l) = f(i,a)::l
in Vector.fromList (rev (foldli ff [] sl))
These fold the function f over all the elements of a
vector slice, using the value init as the initial value. The functions
foldli and foldl apply the function f from left to right (increasing
indices), while the functions foldri and foldr work from right to left
(decreasing indices). The more general functions foldli and foldri
supply f with the index of the corresponding element in the slice. See
the MONO_ARRAY manual pages for reference implementations of the
indexed versions. The expression foldl f init sl is equivalent to
(foldli (fn (_, a, x) => f(a, x)) init sl). The analogous equivalence
holds for foldri and foldr.
These apply f to each element of the slice sl, from left
to right (i.e., increasing indices), until a true value is
returned. If this occurs, the functions return the element; otherwise,
they return NONE. The more general version findi also supplies f with
the index of the element in the slice and, upon finding an entry
satisfying the predicate, returns that index with the element.
applies f to each element x of the slice sl, from left
to right (i.e., increasing indices), until f(x) evaluates to true; it
returns true if such an x exists and false otherwise.
applies f to each element x of the slice sl, from left to
right (i.e., increasing indices), until f(x) evaluates to false; it
returns false if such an x exists and true otherwise. It is equivalent
to not(exists (not o f ) sl)).