Library
Module
Module type
Parameter
Class
Class type
Type
Construction
val empty : 'a t
empty = []
val singleton : 'a -> 'a t
singleton x = [x]
val make : int -> 'a -> 'a t
make n x
returns a list of length n
filled with x
. Throws Invalid_argument "List.make"
when n < 0
.
val init : int -> ( int -> 'a ) -> 'a t
init n f
returns a list of [f 0; f 1; ..; f (n-1)]
. Throws Invalid_argument "List.init"
when n < 0
.
Conversions
val to_list : 'a t -> 'a list
val to_array : 'a t -> 'a array
val of_list : 'a list -> 'a t
val of_array : 'a array -> 'a t
Basics
Folding
val fold_right : ( 'a -> 'st -> 'st ) -> 'a t -> 'st -> 'st
List must be non-empty. Otherwise, it raises Invalid_argment "fold_left1"
.
List must be non-empty. Otherwise, it raises Invalid_argment "fold_left1"
.
concat_map f xs = concat @@ map f xs
but much faster.
concat_map f xs = rev @@ concat @@ map f xs
but much faster.
val map_accum_left :
( 'acc -> 'a -> 'acc * 'b ) ->
'acc ->
'a t ->
'acc * 'b list
mapAccumL f acc t
behaves like a combination of map
and fold_left
; it applies a function f
to each element of a list t
, passing an accumulating parameter acc
from left to right, and returning a final value of this accumulator together with the new list.
Access
The last element of the list. Raises Failure when the argument is . last [1;2;3] = 3
Find and assoc
Sublist by index
sub_default t pos len
returns a sublist of t
from the position pos
(0-start) and length len
.
The region specified by pos
and len
is trimmed by t
: if it exceeds the size of t
, it is intersected with the region from 0
and length List.length t
. One tricky example is:
sub_default [0;1;2;3;4;5] (-1) 3 = [0;1]
Sublist by predicate
span p xs
extract the longest prefix of xs
whose elements satisfy p
.
Sort and uniq
Filter out duplicate elements using the given equality. The first result list is the list of first unique occurrences, the second result list is the rest, the duplications removed from the first result list, paired with the corresponding element of the first result list.
O(n^2).
Same as uniq_dup
but only works for already sorted by the same ordering. O(n log n)
Check the list is a unique list or not, wrt the equality function. If not, it returns a dupe example.
has_dup (fun x y -> fst x = fst y) [(1,2); (2,3); (4,5)] = None
has_dup (fun x y -> fst x = fst y) [(1,2); (2,3); (2,5)] = Some ( (2,3), (2,5) )
O(n^2)
group xs
returns a list of lists such that the concatenation of the result is equal to the argument. Moreover, each sublist in the result contains only equal elements:
group ['M'; 'i'; 's'; 's'; 'i'; 's'; 's'; 'i'; 'p'; 'p'; 'i'] = [['M'],['i'],['s';'s'];['i'];['s';'s'];['i'];['p';'p'];['i']]
Haskell's group
.
Same as group
but equality can be given. Haskell's groupBy
Composition
Haskell's zip. Like List.combine but does not raise when the lengths are not equal. Tail recursive.
With reference
val accum : 'a list ref -> 'a -> unit
accum xsref x
is equivalent with xsref := x :: !xsref
val (+::=) : 'a list ref -> 'a -> unit
Same as accum
Integer ranges
init_from_to f t fn = [fn x | x <- [f..t] ]
Misc
Modules
module Infix : sig ... end
module Stdlib : sig ... end
Non tail recursive versions
These non tail recursive versions are from stdlib.
Deprecated
Check the list is a unique list or not, wrt the key function. If not, it returns a dupe example.
is_unique fst [(1,2); (2,3); (4,5)] = None
is_unique fst [(1,2); (2,3); (2,5)] = Some ( (2,3), (2,5) )