vect: operations on vectors
value vect_length : 'a vect > int

Return the length (number of elements) of the given vector.
value vect_item : 'a vect > int > 'a

vect_item v n returns the element number n of vector v.
The first element has number 0.
The last element has number vect_length v  1.
Raise Invalid_argument "vect_item" if n is outside the range
0 to (vect_length v  1).
You can also write v.(n) instead of vect_item v n.
value vect_assign : 'a vect > int > 'a > unit

vect_assign v n x modifies vector v in place, replacing
element number n with x.
Raise Invalid_argument "vect_assign" if n is outside the range
0 to vect_length v  1.
You can also write v.(n) < x instead of vect_assign v n x.
value make_vect : int > 'a > 'a vect

make_vect n x returns a fresh vector of length n,
initialized with x.
All the elements of this new vector are initially
physically equal to x (see module eq). Consequently, if x
is mutable, it is shared among all elements of the vector,
and modifying x through one of the vector entries will modify
all other entries at the same time.
value make_matrix : int > int > 'a > 'a vect vect

make_matrix dimx dimy e returns a twodimensional array
(a vector of vectors) with first dimension dimx and
second dimension dimy. All the elements of this new matrix
are initially physically equal to e.
The element (x,y) of a matrix m is accessed
with the notation m.(x).(y).
value init_vect : int > (int > 'a) > 'a vect

init_vect n f returns a fresh array of length n,
with element number i equal to f i.
value concat_vect : 'a vect > 'a vect > 'a vect

concat_vect v1 v2 returns a fresh vector containing the
concatenation of vectors v1 and v2.
value sub_vect : 'a vect > int > int > 'a vect

sub_vect v start len returns a fresh vector of length len,
containing the elements number start to start + len  1
of vector v.
Raise Invalid_argument "sub_vect" if start and len do not
designate a valid subvector of v; that is, if
start < 0, or len < 0, or start + len > vect_length v.
value copy_vect : 'a vect > 'a vect

copy_vect v returns a copy of v, that is, a fresh vector
containing the same elements as v.
value fill_vect : 'a vect > int > int > 'a > unit

fill_vect v ofs len x modifies the vector v in place,
storing x in elements number ofs to ofs + len  1.
Raise Invalid_argument "fill_vect" if ofs and len do not
designate a valid subvector of v.
value blit_vect : 'a vect > int > 'a vect > int > int > unit

blit_vect v1 o1 v2 o2 len copies len elements
from vector v1, starting at element number o1, to vector v2,
starting at element number o2. It works correctly even if
v1 and v2 are the same vector, and the source and
destination chunks overlap.
Raise Invalid_argument "blit_vect" if o1 and len do not
designate a valid subvector of v1, or if o2 and len do not
designate a valid subvector of v2.
value list_of_vect : 'a vect > 'a list

list_of_vect v returns the list of all the elements of v, that is:
[v.(0); v.(1); ...; v.(vect_length v  1)].
value vect_of_list : 'a list > 'a vect

vect_of_list l returns a fresh vector containing the elements
of l.
value map_vect : ('a > 'b) > 'a vect > 'b vect

map_vect f v applies function f to all the elements of v,
and builds a vector with the results returned by f:
[ f v.(0); f v.(1); ...; f v.(vect_length v  1) ].
value map_vect_list : ('a > 'b) > 'a vect > 'b list

map_vect_list f v applies function f to all the elements of v,
and builds a list with the results returned by f:
[ f v.(0); f v.(1); ...; f v.(vect_length v  1) ].
value do_vect : ('a > unit) > 'a vect > unit

do_vect f v applies function f in turn to all the elements of v,
discarding all the results:
f v.(0); f v.(1); ...; f v.(vect_length v  1); ().