Monomorphic array operations.
The MONO_ARRAY signature is a generic interface to monomorphic arrays, mutable sequences with constant-time access and update. Monomorphic arrays allow more compact representations than the analogous polymorphic arrays over the same element type. Arrays have a special equality property: two arrays are equal if they are the same array, i.e., created by the same call to a primitive array constructor such as array, fromList, etc.; otherwise they are not equal. This also holds for arrays of zero length.structure CharArray : MONO_ARRAY structure Word8Array : MONO_ARRAY
signature MONO_ARRAY = sig eqtype array type elem type vector val maxLen : int val array : int * elem -> array val fromList : elem list -> array val tabulate : int * (int -> elem) -> array val length : array -> int val sub : array * int -> elem val update : array * int * elem -> unit val vector : array -> vector val copy : {src : array, dst : array, di : int} -> unit val copyVec : {src : vector, dst : array, di : int} -> unit val appi : (int * elem -> unit) -> array -> unit val app : (elem -> unit) -> array -> unit val modifyi : (int * elem -> elem) -> array -> unit val modify : (elem -> elem) -> array -> unit val foldli : (int * elem * 'b -> 'b) -> 'b -> array -> 'b val foldri : (int * elem * 'b -> 'b) -> 'b -> array -> 'b val foldl : (elem * 'b -> 'b) -> 'b -> array -> 'b val foldr : (elem * 'b -> 'b) -> 'b -> array -> 'b val findi : (int * elem -> bool) -> array -> (int * elem) option val find : (elem -> bool) -> array -> elem option val exists : (elem -> bool) -> array -> bool val all : (elem -> bool) -> array -> bool val collate : (elem * elem -> order) -> array * array -> order end
fun foldli f init seq = let val len = length seq fun loop (i, b) = if i = len then b else loop(i+1,f(i,sub(seq,i),b)) in loop(0,init)
fun foldri f init seq = let val len = length seq fun loop (i, b) = if i = ~1 then b else loop(i-1,f(i,sub(seq,i),b)) in loop(len-1,init)The expression foldl f init arr is equivalent to
foldli (fn (_, a, x) => f(a, x)) init arrThe analogous equivalences hold for foldri and foldr.