HELP EXTENDED_VECTOR Robert Duncan, November 1990 Additional functions on vectors. CONTENTS - (Use g to access required sections) -- The ExtendedVector Module -- Vector Functions -- The ExtendedVector Module ------------------------------------------ signature ExtendedVector structure ExtendedVector : ExtendedVector The structure -ExtendedVector- is an autoloadable library module defining some additional functions on the abstract type -vector- (see HELP * VECTOR). These functions are kept separate from the basic vector functions because they are non-standard, i.e. they are not necessarily supported by any other Standard ML compiler. The -ExtendedVector- structure is described by the following signature: the vector type and all the basic vector functions are included in the signature for convenience. signature ExtendedVector = sig (* Include everything from the basic Vector signature *) include Vector (* Additional functions *) val from_list : 'a list -> 'a vector val to_list : 'a vector -> 'a list val map : ('a -> 'b) -> 'a vector -> 'b vector val app : ('a -> unit) -> 'a vector -> unit val iterate : ('a * int -> 'b) -> 'a vector -> 'b vector end -- Vector Functions --------------------------------------------------- Each function described below is illustrated with a model definition based on the primitive operations provided by the standard -Vector- module. The definitions are assumed to be evaluated within the scope of the declaration: open Vector infix 9 sub val from_list (l : 'a list) : 'a vector val to_list (v : 'a vector) : 'a list Conversion between vectors and lists. val from_list = vector fun to_list v = let fun loop i = if i = length(v) then [] else v sub i :: loop(i+1) in loop 0 end val map (f : 'a -> 'b) (v : 'a vector) : 'b vector Constructs a new vector of size -length(v)- where the i'th element of the new vector is the result of applying -f- to the i'th element of -v-. fun map f v = tabulate(length(v), fn i => f(v sub i)) val app (f : 'a -> unit) (v : 'a vector) : unit Applies the (side-effecting) function -f- to each element of the vector -v- in index order. fun app (f : 'a -> unit) v = let fun loop i = if i = length(v) then () else (f(v sub i); loop(i+1)) in loop 0 end val iterate (f : 'a * int -> 'b) (v : 'a vector) : 'b vector Constructs a new vector of size -length(v)- where the i'th element of the new vector is the result of applying -f- to the i'th element of -v- and the index -i-. fun iterate f v = tabulate(length(v), fn i => f(v sub i, i)) --- C.all/pml/help/extended_vector --- Copyright University of Sussex 1991. All rights reserved. ----------