Library
Module
Module type
Parameter
Class
Class type
include module type of struct include ListLabels end
ListLabels.rev_append l1 l2
reverses l1
and concatenates it to l2
. This is equivalent to ListLabels.rev
l1 @ l2
, but rev_append
is tail-recursive and more efficient.
Concatenate a list of lists. The elements of the argument are all concatenated together (in the same order) to give the result. Not tail-recursive (length of the argument + length of the longest sub-list).
Same as concat
. Not tail-recursive (length of the argument + length of the longest sub-list).
Iterators
ListLabels.rev_map f l
gives the same result as ListLabels.rev
(
ListLabels.map
f l)
, but is tail-recursive and more efficient.
Iterators on two lists
ListLabels.iter2 f [a1; ...; an] [b1; ...; bn]
calls in turn f a1 b1; ...; f an bn
. Raise Invalid_argument
if the two lists are determined to have different lengths.
ListLabels.map2 f [a1; ...; an] [b1; ...; bn]
is [f a1 b1; ...; f an bn]
. Raise Invalid_argument
if the two lists are determined to have different lengths. Not tail-recursive.
ListLabels.rev_map2 f l1 l2
gives the same result as ListLabels.rev
(
ListLabels.map2
f l1 l2)
, but is tail-recursive and more efficient.
ListLabels.fold_left2 f a [b1; ...; bn] [c1; ...; cn]
is f (... (f (f a b1 c1) b2 c2) ...) bn cn
. Raise Invalid_argument
if the two lists are determined to have different lengths.
ListLabels.fold_right2 f [a1; ...; an] [b1; ...; bn] c
is f a1 b1 (f a2 b2 (... (f an bn c) ...))
. Raise Invalid_argument
if the two lists are determined to have different lengths. Not tail-recursive.
List scanning
Same as ListLabels.for_all
, but for a two-argument predicate. Raise Invalid_argument
if the two lists are determined to have different lengths.
Same as ListLabels.exists
, but for a two-argument predicate. Raise Invalid_argument
if the two lists are determined to have different lengths.
Same as ListLabels.mem
, but uses physical equality instead of structural equality to compare list elements.
List searching
find_all
is another name for ListLabels.filter
.
partition p l
returns a pair of lists (l1, l2)
, where l1
is the list of all the elements of l
that satisfy the predicate p
, and l2
is the list of all the elements of l
that do not satisfy p
. The order of the elements in the input list is preserved.
Association lists
Lists of pairs
Transform a list of pairs into a pair of lists: split [(a1,b1); ...; (an,bn)]
is ([a1; ...; an], [b1; ...; bn])
. Not tail-recursive.
Transform a pair of lists into a list of pairs: combine [a1; ...; an] [b1; ...; bn]
is [(a1,b1); ...; (an,bn)]
. Raise Invalid_argument
if the two lists have different lengths. Not tail-recursive.
Sorting
Sort a list in increasing order according to a comparison function. The comparison function must return 0 if its arguments compare as equal, a positive integer if the first is greater, and a negative integer if the first is smaller (see Array.sort for a complete specification). For example, Pervasives.compare
is a suitable comparison function. The resulting list is sorted in increasing order. ListLabels.sort
is guaranteed to run in constant heap space (in addition to the size of the result list) and logarithmic stack space.
The current implementation uses Merge Sort. It runs in constant heap space and logarithmic stack space.
Same as ListLabels.sort
, but the sorting algorithm is guaranteed to be stable (i.e. elements that compare equal are kept in their original order) .
The current implementation uses Merge Sort. It runs in constant heap space and logarithmic stack space.
Same as ListLabels.sort
or ListLabels.stable_sort
, whichever is faster on typical input.
Same as ListLabels.sort
, but also remove duplicates.
changing the order of arguments on some standard List
functions.
Tail recursive versions of standard List
module
module Assoc : sig ... end