package gen
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Module Gen.Restart
type 'a t = unit -> 'a gentype 'a restartable = 'a tinclude S with type 'a t := 'a restartable
val empty : 'a restartableEmpty generator, with no elements
val singleton : 'a -> 'a restartableOne-element generator
val repeat : 'a -> 'a restartableRepeat same element endlessly
val iterate : 'a -> ('a -> 'a) -> 'a restartableiterate x f is [x; f x; f (f x); f (f (f x)); ...]
val unfold : ('b -> ('a * 'b) option) -> 'b -> 'a restartableDual of fold, with a deconstructing operation. It keeps on unfolding the 'b value into a new 'b, and a 'a which is yielded, until None is returned.
val init : ?limit:int -> (int -> 'a) -> 'a restartableCalls the function, starting from 0, on increasing indices. If limit is provided and is a positive int, iteration will stop at the limit (excluded). For instance init ~limit:4 id will yield 0, 1, 2, and 3.
Basic combinators
val is_empty : _ restartable -> boolCheck whether the enum is empty. Pops an element, if any
val fold : ('b -> 'a -> 'b) -> 'b -> 'a restartable -> 'bFold on the generator, tail-recursively. Consumes the generator.
val reduce : ('a -> 'a -> 'a) -> 'a restartable -> 'aFold on non-empty sequences. Consumes the generator.
val scan : ('b -> 'a -> 'b) -> 'b -> 'a restartable -> 'b restartableLike fold, but keeping successive values of the accumulator. Consumes the generator.
val unfold_scan :
('b -> 'a -> 'b * 'c) ->
'b ->
'a restartable ->
'c restartableval iter : ('a -> unit) -> 'a restartable -> unitIterate on the enum, consumes it.
val iteri : (int -> 'a -> unit) -> 'a restartable -> unitIterate on elements with their index in the enum, from 0, consuming it.
val length : _ restartable -> intLength of an enum (linear time), consuming it
val map : ('a -> 'b) -> 'a restartable -> 'b restartableLazy map. No iteration is performed now, the function will be called when the result is traversed.
val append : 'a restartable -> 'a restartable -> 'a restartableAppend the two enums; the result contains the elements of the first, then the elements of the second enum.
val flatten : 'a Gen_intf.gen restartable -> 'a restartableFlatten the enumeration of generators
val flat_map : ('a -> 'b Gen_intf.gen) -> 'a restartable -> 'b restartableMonadic bind; each element is transformed to a sub-enum which is then iterated on, before the next element is processed, and so on.
val mem : ?eq:('a -> 'a -> bool) -> 'a -> 'a restartable -> boolIs the given element, member of the enum?
val take : int -> 'a restartable -> 'a restartableTake at most n elements
val drop : int -> 'a restartable -> 'a restartableDrop n elements
val nth : int -> 'a restartable -> 'an-th element, or Not_found
val take_nth : int -> 'a restartable -> 'a restartabletake_nth n g returns every element of g whose index is a multiple of n. For instance take_nth 2 (1--10) |> to_list will return 1;3;5;7;9
val filter : ('a -> bool) -> 'a restartable -> 'a restartableFilter out elements that do not satisfy the predicate.
val take_while : ('a -> bool) -> 'a restartable -> 'a restartableTake elements while they satisfy the predicate
val drop_while : ('a -> bool) -> 'a restartable -> 'a restartableDrop elements while they satisfy the predicate
val filter_map : ('a -> 'b option) -> 'a restartable -> 'b restartableMaps some elements to 'b, drop the other ones
val zip_index : 'a restartable -> (int * 'a) restartableZip elements with their index in the enum
val unzip : ('a * 'b) restartable -> 'a restartable * 'b restartableUnzip into two sequences, splitting each pair
val partition :
('a -> bool) ->
'a restartable ->
'a restartable * 'a restartablepartition p l returns the elements that satisfy p, and the elements that do not satisfy p
val for_all : ('a -> bool) -> 'a restartable -> boolIs the predicate true for all elements?
val exists : ('a -> bool) -> 'a restartable -> boolIs the predicate true for at least one element?
val min : ?lt:('a -> 'a -> bool) -> 'a restartable -> 'aMinimum element, according to the given comparison function.
val max : ?lt:('a -> 'a -> bool) -> 'a restartable -> 'aMaximum element, see min
val eq : ?eq:('a -> 'a -> bool) -> 'a restartable -> 'a restartable -> boolEquality of generators.
val lexico : ?cmp:('a -> 'a -> int) -> 'a restartable -> 'a restartable -> intLexicographic comparison of generators. If a generator is a prefix of the other one, it is considered smaller.
val compare : ?cmp:('a -> 'a -> int) -> 'a restartable -> 'a restartable -> intSynonym for lexico
val find : ('a -> bool) -> 'a restartable -> 'a optionfind p e returns the first element of e to satisfy p, or None.
val sum : int restartable -> intSum of all elements
Multiple iterators
val map2 :
('a -> 'b -> 'c) ->
'a restartable ->
'b restartable ->
'c restartableMap on the two sequences. Stops once one of them is exhausted.
val iter2 : ('a -> 'b -> unit) -> 'a restartable -> 'b restartable -> unitIterate on the two sequences. Stops once one of them is exhausted.
val fold2 :
('acc -> 'a -> 'b -> 'acc) ->
'acc ->
'a restartable ->
'b restartable ->
'accFold the common prefix of the two iterators
val for_all2 : ('a -> 'b -> bool) -> 'a restartable -> 'b restartable -> boolSucceeds if all pairs of elements satisfy the predicate. Ignores elements of an iterator if the other runs dry.
val exists2 : ('a -> 'b -> bool) -> 'a restartable -> 'b restartable -> boolSucceeds if some pair of elements satisfy the predicate. Ignores elements of an iterator if the other runs dry.
val zip_with :
('a -> 'b -> 'c) ->
'a restartable ->
'b restartable ->
'c restartableCombine common part of the enums (stops when one is exhausted)
val zip : 'a restartable -> 'b restartable -> ('a * 'b) restartableZip together the common part of the enums
Complex combinators
val merge : 'a Gen_intf.gen restartable -> 'a restartablePick elements fairly in each sub-generator. The merge of enums e1, e2, ... picks elements in e1, e2, in e3, e1, e2 .... Once a generator is empty, it is skipped; when they are all empty, and none remains in the input, their merge is also empty. For instance, merge [1;3;5] [2;4;6] will be, in disorder, 1;2;3;4;5;6.
val intersection :
?cmp:('a -> 'a -> int) ->
'a restartable ->
'a restartable ->
'a restartableIntersection of two sorted sequences. Only elements that occur in both inputs appear in the output
val sorted_merge :
?cmp:('a -> 'a -> int) ->
'a restartable ->
'a restartable ->
'a restartableMerge two sorted sequences into a sorted sequence
val sorted_merge_n :
?cmp:('a -> 'a -> int) ->
'a restartable list ->
'a restartableSorted merge of multiple sorted sequences
val tee : ?n:int -> 'a restartable -> 'a Gen_intf.gen listDuplicate the enum into n generators (default 2). The generators share the same underlying instance of the enum, so the optimal case is when they are consumed evenly
val round_robin : ?n:int -> 'a restartable -> 'a Gen_intf.gen listSplit the enum into n generators in a fair way. Elements with index = k mod n with go to the k-th enum. n default value is 2.
val interleave : 'a restartable -> 'a restartable -> 'a restartableinterleave a b yields an element of a, then an element of b, and so on. When a generator is exhausted, this behaves like the other generator.
val intersperse : 'a -> 'a restartable -> 'a restartablePut the separator element between all elements of the given enum
val product : 'a restartable -> 'b restartable -> ('a * 'b) restartableCartesian product, in no predictable order. Works even if some of the arguments are infinite.
val group : ?eq:('a -> 'a -> bool) -> 'a restartable -> 'a list restartableGroup equal consecutive elements together.
val uniq : ?eq:('a -> 'a -> bool) -> 'a restartable -> 'a restartableRemove consecutive duplicate elements. Basically this is like fun e -> map List.hd (group e).
val sort : ?cmp:('a -> 'a -> int) -> 'a restartable -> 'a restartableSort according to the given comparison function. The enum must be finite.
val sort_uniq : ?cmp:('a -> 'a -> int) -> 'a restartable -> 'a restartableSort and remove duplicates. The enum must be finite.
val chunks : int -> 'a restartable -> 'a array restartablechunks n e returns a generator of arrays of length n, composed of successive elements of e. The last array may be smaller than n
val permutations : 'a restartable -> 'a list restartablePermutations of the enum.
val combinations : int -> 'a restartable -> 'a list restartableCombinations of given length. The ordering of the elements within each combination is unspecified. Example (ignoring ordering): combinations 2 (1--3) |> to_list = [[1;2]; [1;3]; [2;3]]
val power_set : 'a restartable -> 'a list restartableAll subsets of the enum (in no particular order). The ordering of the elements within each subset is unspecified.
Basic conversion functions
val of_list : 'a list -> 'a restartableEnumerate elements of the list
val to_list : 'a restartable -> 'a listnon tail-call trasnformation to list, in the same order
val to_rev_list : 'a restartable -> 'a listTail call conversion to list, in reverse order (more efficient)
val to_array : 'a restartable -> 'a arrayConvert the enum to an array (not very efficient)
val of_array : ?start:int -> ?len:int -> 'a array -> 'a restartableIterate on (a slice of) the given array
val rand_int : int -> int restartableRandom ints in the given range.
val int_range : int -> int -> int restartableint_range a b enumerates integers between a and b, included. a is assumed to be smaller than b.
module Infix : sig ... endval (--) : int -> int -> int restartableSynonym for int_range
val (>>=) : 'a restartable -> ('a -> 'b Gen_intf.gen) -> 'b restartableMonadic bind operator
val pp :
?start:string ->
?stop:string ->
?sep:string ->
?horizontal:bool ->
(Format.formatter -> 'a -> unit) ->
Format.formatter ->
'a restartable ->
unitPretty print the content of the generator on a formatter.