signature LIST_PAIR
structure ListPair : LIST_PAIR
An extended version of the Standard ML Basis' ListPair structure.
See also: List, VectorPair
Imported implicitly.
signature LIST_PAIR =
sig
exception UnequalLengths
val zip : 'a list * 'b list -> ('a * 'b) list
val zipEq : 'a list * 'b list -> ('a * 'b) list
val unzip : ('a * 'b) list -> 'a list * 'b list
val app : ('a * 'b -> unit) -> 'a list * 'b list -> unit
val appEq : ('a * 'b -> unit) -> 'a list * 'b list -> unit
val appr : ('a * 'b -> unit) -> 'a list * 'b list -> unit
val apprEq : ('a * 'b -> unit) -> 'a list * 'b list -> unit
val map : ('a * 'b -> 'c) -> 'a list * 'b list -> 'c list
val mapEq : ('a * 'b -> 'c) -> 'a list * 'b list -> 'c list
val mapPartial : ('a * 'b -> 'c option) -> 'a list * 'b list -> 'c list
val mapPartialEq : ('a * 'b -> 'c option) -> 'a list * 'b list -> 'c list
val foldl : ('a * 'b * 'c -> 'c) -> 'c -> 'a list * 'b list -> 'c
val foldlEq : ('a * 'b * 'c -> 'c) -> 'c -> 'a list * 'b list -> 'c
val foldr : ('a * 'b * 'c -> 'c) -> 'c -> 'a list * 'b list -> 'c
val foldrEq : ('a * 'b * 'c -> 'c) -> 'c -> 'a list * 'b list -> 'c
val all : ('a * 'b -> bool) -> 'a list * 'b list -> bool
val allEq : ('a * 'b -> bool) -> 'a list * 'b list -> bool
val exists : ('a * 'b -> bool) -> 'a list * 'b list -> bool
val existsEq : ('a * 'b -> bool) -> 'a list * 'b list -> bool
val find : ('a * 'b -> bool) -> 'a list * 'b list -> ('a * 'b) option
val filter : ('a * 'b -> bool) -> 'a list * 'b list -> ('a * 'b) list
val filterEq : ('a * 'b -> bool) -> 'a list * 'b list -> ('a * 'b) list
val appi : (int * 'a * 'b -> unit) -> 'a list * 'b list -> unit
val appiEq : (int * 'a * 'b -> unit) -> 'a list * 'b list -> unit
val appri : (int * 'a * 'b -> unit) -> 'a list * 'b list -> unit
val appriEq : (int * 'a * 'b -> unit) -> 'a list * 'b list -> unit
val mapi : (int * 'a * 'b -> 'c) -> 'a list * 'b list -> 'c list
val mapiEq : (int * 'a * 'b -> 'c) -> 'a list * 'b list -> 'c list
val mapiPartial : (int * 'a * 'b -> 'c option) -> 'a list * 'b list -> 'c list
val mapiPartialEq : (int * 'a * 'b -> 'c option) -> 'a list * 'b list -> 'c list
val foldli : (int * 'a * 'b * 'c -> 'c) -> 'c -> 'a list * 'b list ->'c
val foldliEq : (int * 'a * 'b * 'c -> 'c) -> 'c -> 'a list * 'b list ->'c
val foldri : (int * 'a * 'b * 'c -> 'c) -> 'c -> 'a list * 'b list -> 'c
val foldriEq : (int * 'a * 'b * 'c -> 'c) -> 'c -> 'a list * 'b list -> 'c
val alli : (int * 'a * 'b -> bool) -> 'a list * 'b list -> bool
val alliEq : (int * 'a * 'b -> bool) -> 'a list * 'b list -> bool
val existsi : (int * 'a * 'b -> bool) -> 'a list * 'b list -> bool
val existsiEq : (int * 'a * 'b -> bool) -> 'a list * 'b list -> bool
val findi : (int * 'a * 'b -> bool) -> 'a list * 'b list -> (int * 'a * 'b) option
val filteri : (int * 'a * 'b -> bool) -> 'a list * 'b list -> (int * 'a * 'b) list
val filteriEq : (int * 'a * 'b -> bool) -> 'a list * 'b list -> (int * 'a * 'b) list
end
Items not described here are as in the Standard ML Basis' ListPair structure.
Like app, but applies f in right to left order.
Maps the function f over the list of pairs of elements from the lists l1 and l2, returning the list of results where f was defined. If the lists are of unequal lengths, the excess elements from the tail of the longer one are ignored. The above expression is equivalent to:
List.mapPartial f (zip (l1, l2)).
Applies f to each pair (x1,x2) of elements of the lists, from left to right, until f(x1,x2) evaluates to true; returns SOME(x1,x2) if such a pair exists and NONE otherwise. If the lists are of unequal lengths, the excess elements from the tail of the longer one are ignored. The above expression is equivalent to:
List.find f (zip (l1, l2))
Indexed versions of the functions app, appr, map, mapPartial, foldl, foldr, all, exists, find and filter. The index of each pair of elements (starting from 0) is passed to f as an additional argument. For appri and foldri, processing starts at the highest index. The functions findi and filteri return indices along with the corresponding pair of elements. The following equivalences hold:
app f (l1, l2) = appi (f o g1) (l1, l2)
appr f (l1, l2) = appri (f o g1) (l1, l2)
map f (l1, l2) = mapi (f o g1) (l1, l2)
mapPartial f (l1, l2) = mapiPartial (f o g1) (l1, l2)
foldl f b (l1, l2) = foldli (f o g2) b (l1, l2)
foldr f b (l1, l2) = foldri (f o g2) b (l1, l2)
all f (l1, l2) = alli (f o g1) (l1, l2)
exists f (l1, l2) = existsi (f o g1) (l1, l2)
find f (l1, l2) = Option.map g1 (findi (f o g1) (l1, l2))
filter f (l1, l2) = map g1 (filteri (f o g1) (l1, l2))
where
g1 = fn (i,a,b) => f(a,b)
g2 = fn (i,a,b,c) => f(a,b,c)
Variants of the functions appr and mapPartial that raise UnequalLengths if the argument lists are not of equal lengths.
Variants of the functions appi, appri, mapi, mapiPartial, foldli, foldri and filteri that raise UnequalLengths if the argument lists are not of equal lengths.
Indexed version of the functions allEq and existsEq. The index of each pair of elemente (starting from 0) is passed to f as an additional argument. The following equivalence hold:
allEq f (l1, l2) = alliEq (f o g) (l1, l2)
existsEq f (l1, l2) = existsiEq (f o g) (l1, l2)
where
g = fn (i,a,b) => f(a,b)