iter #
Iterator Tools
This module provides two different ways of managing combinatorics. Let see an example for combinations.
Fully formed array of all Combinations
// combinations will return an array of all length `r` combinations of `data`
// While waiting on https://github.com/vlang/v/issues/7753 to be fixed, the function
// assumes f64 array input. Will be easy to change to generic later
pub fn combinations(data []f64, r int) [][]f64
Lazy generation
This case is optimal to generate combinations in a lazy way, optimizing memory use:
// CombinationsIter.new will return an iterator that allows
// lazy computation for all length `r` combinations of `data`
pub fn CombinationsIter.new(data []f64, r int) CombinationsIter
// next will return next combination if possible
pub fn (mut o CombinationsIter) next() ?[]f64
fn combinations #
fn combinations(data []f64, r int) [][]f64
combinations will return an array of all length r combinations of data While waiting on https://github.com/vlang/v/issues/7753 to be fixed, the function assumes f64 array input. Will be easy to change to generic later
fn combinations_with_replacement #
fn combinations_with_replacement(data []f64, r int) [][]f64
combinations_with_replacement will return r length subsequences of elements from the input data allowing individual elements to be repeated more than once. This is as close a translation of python's [itertools.combinations_with_replacement] (https://docs.python.org/3.9/library/itertools.html#itertools.combinations_with_replacement) as I could manage. Using f64 array instead of generic while waiting on https://github.com/vlang/v/issues/7753
fn permutations #
fn permutations(data []f64, r int) [][]f64
permutations returns successive r length permutations of elements in data
fn product #
fn product(data [][]f64) [][]f64
Cartesian product of the arrays in data
fn CombinationsIter.new #
fn CombinationsIter.new(data []f64, r int) CombinationsIter
CombinationsIter.new will return an iterator that allows lazy computation for all length r combinations of data
fn CombinationsWithReplacementIter.new #
fn CombinationsWithReplacementIter.new(data []f64, r int) CombinationsWithReplacementIter
CombinationsWithReplacementIter.new will return an iterator that allows lazy computation for all length r combinations with replacement of data
fn Counter.new #
fn Counter.new(start f64, step f64) Counter
fn Cycler.new #
fn Cycler.new(data []f64) Cycler
fn FloatIter.new #
fn FloatIter.new(params FloatIterParams) !FloatIter
FloatIter.new returns an iterator of evenly spaced floats in the half-open interval [start, stop).
parameters: FloatIterParams { -start f64 : the start of the range. -stop f64 [required]: the end of the range (exclusive). -step f64 = 1: the step between the numbers. }
fn IntIter.new #
fn IntIter.new(params IntIterParams) !IntIter
IntIter.new returns an iterator of evenly spaced integers numbers in the half-open interval [start, stop).
parameters: IntIterParams { -start i64 : the start of the range. -stop i64 [required]: the end of the range (exclusive). -step i64 = 1: the step between the numbers. }
fn LinearIter.new #
fn LinearIter.new(params LinearIterParams) !LinearIter
LinearIter.new returns an iterator of len evenly spaced floats in the interval [start, stop]. The endpoint of the interval can optionally be excluded.
parameters: LinearIterParams { -start    f64 :           The start of the range. -stop     f64 [required]: The end of the range. -len      i64  = 50:      Number of samples to generate. Must be non-negative. -endpoint bool = true:    If true, stop is the last sample. Otherwise, it is not included. }
fn LogIter.new #
fn LogIter.new(params LogIterParams) !LogIter
LogIter.new returns an iterator of len numbers evenly spaced on a logarithmic scale. The sequence starts at base ^ start and ends in base ^ stop (if endpoint = true).
parameters: LogIterParams { -start    f64 [required]: base ^ start is the starting value of the sequence. -stop     f64 [required]: base ^ stop is the final value of the sequence, unless endpoint is false. In that case, num + 1 values are spaced over the interval in log-space, of which all but the last (a sequence of length len) are returned. -len      i64  = 50:      Number of samples to generate. -base     f64  = 10.0:    The base of the log space. -endpoint bool = true:    If true, bas ^ stop is the last sample. Otherwise, it is not included. }
fn PermutationsIter.new #
fn PermutationsIter.new(data []f64, r int) PermutationsIter
PermutationsIter.new will return an iterator that allows lazy computation for all length r permutations of data
fn ProductIterator.new #
fn ProductIterator.new(data [][]f64) ProductIterator
fn Repeater.new #
fn Repeater.new(item f64) Repeater
fn (FloatIter) next #
fn (mut r FloatIter) next() ?f64
next returns the next element of the iterator if possible.
fn (IntIter) next #
fn (mut r IntIter) next() ?i64
next returns the next element of the iterator if possible.
fn (LinearIter) next #
fn (mut o LinearIter) next() ?f64
next returns the next element of the iterator if possible.
fn (LogIter) next #
fn (mut o LogIter) next() ?f64
next returns the next element of the iterator if possible.
struct CombinationsIter #
struct CombinationsIter {
mut:
	pos  u64
	idxs []int
pub:
	repeat int
	size   u64
	data   []f64
}
fn (CombinationsIter) next #
fn (mut o CombinationsIter) next() ?[]f64
next will return next combination if possible
struct CombinationsWithReplacementIter #
struct CombinationsWithReplacementIter {
mut:
	pos  u64
	idxs []int
pub:
	repeat int
	size   u64
	data   []f64
}
fn (CombinationsWithReplacementIter) next #
fn (mut o CombinationsWithReplacementIter) next() ?[]f64
next will return next combination if possible
struct Counter #
struct Counter {
pub:
	step f64
pub mut:
	state f64
}
fn (Counter) next #
fn (mut c Counter) next() ?f64
struct Cycler #
struct Cycler {
mut:
	idx int
pub:
	data []f64
}
fn (Cycler) next #
fn (mut c Cycler) next() ?f64
struct FloatIterParams #
struct FloatIterParams {
pub:
	start f64
	stop  f64 @[required]
	step  f64 = 1.0
}
struct IntIterParams #
struct IntIterParams {
pub:
	start i64
	stop  i64 @[required]
	step  i64 = 1
}
struct LinearIterParams #
struct LinearIterParams {
pub:
	start    f64 @[required]
	stop     f64 @[required]
	len      i64  = 50
	endpoint bool = true
}
struct LogIterParams #
struct LogIterParams {
	start    f64 @[required]
	stop     f64 @[required]
	len      i64  = 50
	base     f64  = 10.0
	endpoint bool = true
}
struct PermutationsIter #
struct PermutationsIter {
mut:
	pos    u64
	idxs   []int
	cycles []int
pub:
	repeat int
	size   u64
	data   []f64
}
fn (PermutationsIter) next #
fn (mut o PermutationsIter) next() ?[]f64
next will return next permutation if possible
struct ProductIterator #
struct ProductIterator {
	repeat_lengths []u64
	size           u64
mut:
	indices_to_grab []int
	idx             u64
pub:
	data [][]f64
}
fn (ProductIterator) next #
fn (mut o ProductIterator) next() ?[]f64
struct Repeater #
struct Repeater {
pub:
	item f64
}
fn (Repeater) next #
fn (m Repeater) next() ?f64
- README
 - fn combinations        
 - fn combinations_with_replacement        
 - fn permutations        
 - fn product        
 - fn CombinationsIter.new        
 - fn CombinationsWithReplacementIter.new        
 - fn Counter.new        
 - fn Cycler.new        
 - fn FloatIter.new        
 - fn IntIter.new        
 - fn LinearIter.new        
 - fn LogIter.new        
 - fn PermutationsIter.new        
 - fn ProductIterator.new        
 - fn Repeater.new        
 - type FloatIter
 - type IntIter
 - type LinearIter
 - type LogIter
 - struct CombinationsIter
 - struct CombinationsWithReplacementIter
 - struct Counter
 - struct Cycler
 - struct FloatIterParams        
 - struct IntIterParams        
 - struct LinearIterParams        
 - struct LogIterParams        
 - struct PermutationsIter
 - struct ProductIterator
 - struct Repeater