module SkewBinaryList:sig..end
This module implements random access lists with O(1) hd and tl
operations and O(log n) lookup and update operations.
type 'a t
val empty : 'a tval is_empty : 'a t -> boolval length : 'a t -> intlength t returns the lenth of the list t. Runs in O(log n)
time and O(1) stack space where n is the number of elements in
the list.val rev : 'a t -> 'a trev t Reverse the list t. Runs in O(n) run and O(1) stack
space where n is the number of elements in the list.val cons : 'a -> 'a t -> 'a tcons x t Adds the element x to the front of the list t.
Runs in O(1) time and stack space.val snoc : 'a -> 'a t -> 'a tsnoc x t Adds the element x to the back of the list t.
Runs in O(n) time and O(1) stack space where n is the length of
the list.val last : 'a t -> 'alast t Returns the element at the back of the list. If the
list is empty, it raises Failure "last". Runs in O(1) stack
and O(log n) time.val hd : 'a t -> 'ahd t Returns the element at the front of the list t. Runs
in O(1) time and stack space. Raises Failure "hd" if the list is
empty.val tl : 'a t -> 'a ttl t Returns the list t with the first element removed.
Runs in O(1) time and stack space. Raises Failure "tl" if the
list is empty.val pop : 'a t -> 'a * 'a tpop t Equivalent to (hd t), (tl t) but is more efficient.
Runs in amortized O(1) time and stack space. If the list is
empty, it raises Failure "pop".val append : 'a t ->
'a t -> 'a tappend t1 t2 Appends the list t2 onto the back of list t1.
Runs in O(n) time and O(1) stack space where n is the number of
elements in t1.val flatten : 'a t t -> 'a tflatten t Appends all of the elements of t into a new list.
Runs in O(n) time and O(1) stack space where n is the sum of
each of the lists in t.val from_list : 'a list -> 'a tfrom_list l Convert the standard list l into a SkewBinaryList.
Runs in O(n) time and O(1) stack space where n is the number of
elements in l.val to_list : 'a t -> 'a listto_list t Convert the SkewBinaryList t into a standard list.
Runs in O(n) time and O(1) stack space where n is the number of
elements in t.val iter : ('a -> unit) -> 'a t -> unititer f t Iterates over each element in the list t in order
and applies f to that element. Runs in O(n*ft) where ft is
the running time of f and uses O(fs) stack space where fs is
the stack space required by f.val fold : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'afold f acc t Accumulates the result acc by applying f acc
x for each element x in t. Runs in O(n*ft) where ft is the
running time of f and uses O(fs) stack space where fs is the
stack space required by f.val rev_map : ('a -> 'b) -> 'a t -> 'b trev_map f t Creates a new list by applying f to each element
of t. The resulting list is in reverse order of t. Runs in
O(n*ft) time where n is the number of elements in t and ft is
the running time of f. It uses O(fs) stack space where fs is
the stack space required by f.val map : ('a -> 'b) -> 'a t -> 'b tmap f t Creates a new list by applying f to each element of
t. The resulting list is in the same order as t. Runs in
O(n*ft) time where n is the number of elements in t and ft is
the running time of f. It uses O((fs * log n) stack space
where fs is the stack space required by f. This function is
slightly more efficient than Reins.SkewBinaryList.rev_map (yielding
a different ordering) and significantly more efficient (by a
constant factor) than SkewBinaryList.rev
(SkewBinaryList.rev_map t).val to_string : ('a -> string) -> 'a t -> stringto_string to_s t Convert the list t into a string using
to_s to individually convert each element into a string. Runs
in O(n*st) where st is the running time of to_s and uses O(ss)
stack space where ss is the amount of stack required by to_s.val compare : ('a -> 'a -> int) ->
'a t -> 'a t -> intcompare f t1 t2 Compares the lists t1 and t2 using f to
compare individual elements. Returns 0 if t1 and t2 are
equal (under f). Returns <0 if t1 is less than t2 and
returns >0 otherwise.val gen : (?size:int -> Random.State.t -> 'a) ->
?size:int -> Random.State.t -> 'a tgen f ?size rs Generates a random list whose length is bounded
by size. Each element in the list is computed by calling f
?size rs. Runs in time O(size * ft) where ft is the running
time of f and uses O(fs) stack space where fs is the stack space
of f.val lookup : int -> 'a t -> 'alookup i t Returns the element at position i (O-indexed) in
the list t. Raises Not_found if the list contains fewer
than i-1 elements. Runs in O(min(i,log n)) time and O(1)
stack space where n is the number of elements in t.val update : int -> 'a -> 'a t -> 'a tupdate i v t Returns a new list where the element in position
i (0-indexed) has been replaced by v. Raises Not_found if
the list contains fewer than i-1 elements. Runs in
O(min(i,log n)) time and O(1) stack space where n is the number
of elements in t.