Procs
proc emptyIter*[T](): iterator (): T
-
emptyIter() ->
proc repeat*[T](value: T; n: int = - 1): iterator (): T
-
repeat(5) -> 5; 5; 5; 5; ... repeat(5,n=2) -> 5; 5
proc count*[T](start: T): iterator (): T
-
count(x0) -> x0; x0 + 1; x0 + 2; ...
proc count*[T](start: T; till: T; step: T = 1; includeLast = false): iterator (): T
-
count(x0, x1) -> x0; x0 + 1; x0 + 2; ...; x1-1
proc cycle*[T](iter: iterator (): T): iterator (): T
-
cycle(a;b;c) -> a;b;c;a;b;c;a;...
proc cycle*[T](iter: iterator (): T; iter2: iterator (): T): iterator (): T
-
cycle(a;b;c, d;e) -> a;b;c;d;e;a;b;...
proc cycle*[T](iter: iterator (): T; iter2: iterator (): T; iter3: iterator (): T): iterator (): T
-
cycle(a;b;c, d;e, f;g) -> a;b;c;d;e;f;g;a;b;...
proc nop*[T](iter: iterator (): T): iterator (): T
-
nop(a;b;c;...) -> a;b;c;...
proc len*[T](iter: iterator (): T): int
-
len(a;b;c;d) -> 4
proc toSeq*[T](iter: iterator (): T; limit: int = - 1): seq[T]
-
toSeq(1;2;3) -> @[1,2,3]
proc reverse*[T](iter: iterator (): T): iterator (): T
-
reverse(1;2;3) -> 3;2;1
proc `$`*[T](iter: iterator (): T; limit = 10): string
-
$(1;2;3) -> "toIter(@[1, 2, 3])"
proc first*[T](iter: iterator (): T): T
-
first(a;b;c;d) -> a
proc first*[T](iter: iterator (): T; default: T): T
-
first(a;b;c;d) -> a first(emptyIter(), default=99) -> 99
proc last*[T](iter: iterator (): T): T
-
last(a;b;c;d) -> d
proc last*[T](iter: iterator (): T; default: T): T
-
last(a;b;c;d) -> d last(emptyIter(), default=99) -> 99
proc peek*[T](iter: iterator (): T): T
-
peek(a;b;c;d) -> a (without removing)
proc peek*[T](iter: iterator (): T; default: T): T
-
peek(a;b;c;d) -> a (without removing) peek(emptyIter(), default=99) -> 99
proc peekList*[T](iter: iterator (): T; n: int): seq[T]
-
peekList(a;b;c;d, 2) -> @[a,b] (without removing)
proc hasNext*[T](iter: var iterator (): T): bool
-
hasNext(a;b;c;d) -> true (without removing) hasNext(emptyIter()) -> false
proc print*[T](iter: iterator (): T; comment: string = ""): iterator (): T
-
print(a;b;c;d) -> a;b;c;d (and also printing)
proc iterate*[T](f: proc (anything: T): T; x0: T): iterator (): T
-
iterate(f, x0) -> x0; f(x0); f(f(x0)); ...
proc take*[T](iter: iterator (): T; n: int): iterator (): T
-
take(1;2;3;4, 3) -> 1;2;3 take(1;2, 3) -> 1;2
proc takeWhile*[T](iter: iterator (): T; cond: proc (x: T): bool): iterator (): T
-
takeWhile(1;2;3;4, proc(x: int): bool = x < 4) -> 1;2;3
proc takeLast*[T](iter: iterator (): T; n: int = 1): iterator (): T
-
takeLast(1;2;3;4;5, 3) -> 3;4;5 takeLast(1;2, 3) -> 1;2
proc drop*[T](iter: iterator (): T; n: int = 1): iterator (): T
-
drop(1;2;3;4;5, 3) -> 4;5 drop(1;2, 3) ->
proc dropWhile*[T](iter: iterator (): T; cond: proc (x: T): bool): iterator (): T
-
dropWhile(1;2;3;4, proc(x: int): bool = x < 4) -> 1;2;3
proc dropLast*[T](iter: iterator (): T; n: int = 1): iterator (): T
-
dropLast(1;2;3;4;5, 3) -> 1;2 dropLast(1;2, 3) ->
proc toTable*[A, B](iter: iterator (): (A, B)): Table[A, B]
-
toTable((1,"A");(2,"B");(3,"C")) -> {1: "A", 2: "B", 3: "C"}
proc toTable*[A, B](iter: iterator (): (A, B); aggr: proc (any1, any2: B): B): Table[ A, B]
-
toTable((1,"A");(2,"B");(3,"C"), (x, y:string) => x&","&y) -> {1: "A", 2: "B", 3: "C"}
proc toTableSeq*[A, B](iter: iterator (): (A, B)): Table[A, seq[B]]
-
toTableSeq((1,"A");(1,"B");(3,"C")) -> {1: ["A", "B"], 3: ["C"]}
proc toIter*[T](s: openArray[T]): iterator (): T
-
toIter([1,2,3]) -> 1;2;3
proc toIter*[T](s: seq[T]): iterator (): T
-
toIter(@[1,2,3]) -> 1;2;3
proc toIter*[A, B](t: Table[A, B]): (iterator (): (A, B))
-
toIter({1:"A", 2:"B"}) -> (1,"A");(2,"B")
proc filter*[T](iter: iterator (): T; f: (proc (any: T): bool)): iterator (): T
-
filter(1;2;3;4;5, proc(x: int): bool = x>3) -> 4;5
proc map*[T, S](iter: iterator (): T; f: (proc (any: T): S)): iterator (): S
-
map(1;2;3;4;5, f) -> f(1);f(2);f(3);f(4);f(5)
proc map*[T, S, U](iter: iterator (): T; f: (proc (anyT: T; anyU: U): S); iter2: iterator (): U): iterator (): S
-
map(1;2;3;4;5, f, 10;20;30) -> f(1,10);f(2,20);f(3,30)
proc map*[T, S, U, V](iter: iterator (): T; f: (proc (anyT: T; anyU: U; anyV: V): S); iter2: iterator (): U; iter3: iterator (): V): iterator (): S
- Map for 3 parameters
proc replace*[T](iter: iterator (): T; n: int; value: T): iterator (): T
-
replace(1;2;3;4;5, 3, 100) -> 1;2;3;100;5
proc replace*[T](iter: iterator (): T; f: proc (x: T): bool; value: T): iterator (): T
-
replace(1;2;3;4;5, f, 100) -> 1;2;3;100;5 (if f(4) is the only true)
proc replace*[T](iter: iterator (): T; f: proc (x: T): bool; valueF: proc (x: T): T): iterator (): T
-
replace(1;2;3;4;5, f, g) -> 1;2;3;g(4);5 (if f(4) is the only true)
proc flatten*[T](iter: iterator (): iterator (): T): iterator (): T
-
flatten((1;2;3);(10;11;12)) -> 1;2;3;10;11;12
proc concat*[T](iter: iterator (): T; iter2: iterator (): T): iterator (): T
-
concat(1;2;3), (10;11;12) -> 1;2;3;10;11;12
proc unique*[T](iter: iterator (): T): iterator (): T
-
unique(1;2;4;3;2;6;5) -> 1;2;4;3;6;5
proc unique*[T, S](iter: iterator (): T; f: proc (any: T): S): iterator (): T
-
unique(1;2;4;3;2;6;5, proc(x: int):int = x div 5) -> 1;6
proc copy*[T](iter: iterator (): T): iterator (): T
-
copy(1;2;3;4;5) -> 1;2;3;4;5 (keeps original as well)
proc `[]`*[T](iter: iterator (): T; n: int): T
-
(1;2;3;4;5)[1] -> 2
proc `[]=`*[T](iter: var iterator (): T; n: int; value: T)
-
(1;2;3;4;5)[1] = 100 -> (the original is modified to 1;100;3;4;5)
proc `[]=`*[T](iter: var iterator (): T; selector: iterator (): bool; value: T)
-
(1;2;3;4;5)[false;false;true;false;false] = 100 -> (the original is modified to 1;2;100;4;5)
proc fold*[T](iter: iterator (): T; f: proc (a, b: T): T): T
-
fold(1;2;3, proc(a,b: int): int=a+b) -> 6
proc fold*[T](iter: iterator (): T; f: proc (a, b: T): T; start: T): T
-
fold(1;2;3, proc(a,b: int): int=a+b, 100) -> 106
proc foldList*[T](iter: iterator (): T; f: proc (a, b: T): T): iterator (): T
-
foldList(1;2;3, proc(a,b: int): int=a+b) -> 1;3;6
proc partitionSeq*[T](iter: iterator (): T; n: int): iterator (): seq[T]
-
partitionSeq(1;2;3;4;5;6,7, 2) -> @[1,2];@[3,4];@[5,6]
proc partitionSeq*[T](iter: iterator (): T; n, step: int): iterator (): seq[T]
-
partitionSeq(1;2;3;4;5, 2,1) -> @[1,2];@[2,3];@[3,4];@[4,5]
proc partitionSeq*[T](iter: iterator (): T; n, step: int; pad: T): iterator (): seq[ T]
-
partitionSeq(1;2;3;4;5, 2,2,99) -> @[1,2];@[3,4];@[5,99]
proc partitionBy*[T, S](iter: iterator (): T; f: proc (any: T): S): iterator (): ( S, seq[T])
-
partitionBy(1;2;3;4;5, proc(x: int): bool = x mod 3==0) -> @[1,2];@[3];@[4,5]
Templates
template yieldAll*[T](iter: iterator (): T)
-
yieldAll(iter) -> for x in iter(): yield
template iterateP*[T](params, f: expr; x0: T): iterator (): T
-
iterateP(a, a+10, x0) -> x0; x0+10; x0+10+10; ...
template iterateIt*[T](f: expr; x0: T): (iterator (): T) {.immediate.}
-
iterateIt(it*2, x0) -> x0; x0*2; x0*2*2; ...
template iterateKV*[T, S](f: expr; x0: (T, S)): (iterator (): (T, S)) {. immediate.}
-
iterateKV((2*k, 3*v), (1,1)) -> (1,1); (2,3); (4,9); ...
template takeWhileP*[T](iter: iterator (): T; params, cond: expr): iterator (): T
-
takeWhile(1;2;3;4, Q, Q < 4) -> 1;2;3
template takeWhileIt*[T](iter: iterator (): T; cond: expr): iterator (): T
-
takeWhileIt(1;2;3;4, it < 4) -> 1;2;3
template takeWhileKV*[T](iter: iterator (): T; cond: expr): iterator (): T
-
takeWhileKV((1,2);(1,3);(10;4), k == 1) -> (1,2);(1;3)
template dropWhileP*[T](iter: iterator (): T; params, cond: expr): iterator (): T
-
dropWhileP(1;2;3;4, Q, Q < 4) -> 1;2;3
template dropWhileIt*[T](iter: iterator (): T; cond: expr): iterator (): T
-
dropWhileIt(1;2;3;4, proc(x: int): bool = x < 4) -> 1;2;3
template dropWhileKV*[T](iter: iterator (): T; cond: expr): iterator (): T
-
dropWhileKV((1,2);(1,3);(10,4), v == 2) -> (1,3);(10,4)
template toTableP*[A, B](iter: iterator (): (A, B); params, f: expr): Table[A, B]
-
toTableP((1,"A");(1,"B");(3,"C"), (A,B), A&B) -> {1: "AB", 3: "C"}
template toTableAB*[A, B](iter: iterator (): (A, B); f: expr): Table[A, B]
-
toTableP((1,"A");(1,"B");(3,"C"), a&b) -> {1: "AB", 3: "C"}
template filterP*[T](iter: iterator (): T; params, f: expr): iterator (): T
-
filter(1;2;3;4;5, Q, Q>3) -> 4;5
template filterIt*[T](iter: iterator (): T; f: expr): iterator (): T
-
filterIt(1;2;3;4;5, it>3) -> 4;5
template filterKV*[A, B](iter: iterator (): (A, B); f: expr): iterator (): (A, B)
-
filterKV(("one", 1);("two", 2);("three", 3), v>1) -> ("two", 2);("three", 3)
template mapP*[T, S](iter: iterator (): T; params, f: expr): iterator (): S
-
mapP(1;2;3;4;5, Q, Q+10) -> 11;12;13;14;15
template mapIt*[T, S](iter: iterator (): T; f: expr): iterator (): S
-
mapIt(1;2;3;4;5, it+10) -> 11;12;13;14;15
template mapKV*[A, B, T](iter: iterator (): (A, B); f: expr): iterator (): T
-
mapKV(("one", 1);("two", 2);("three", 3), v) -> 1;2;3
template mapP*[T, S, U](iter: iterator (): T; params, f: expr; iter2: iterator (): U): iterator (): S
-
map(1;2;3;4;5, (P,Q), P+Q, 10;20;30) -> 11,22,33
template mapIt*[T, S, U](iter: iterator (): T; f: expr; iter2: iterator (): U): iterator (): S
-
map(1;2;3;4;5, it+it2, 10;20;30) -> 11,22,33
template mapKV*[A, B, C, D, T](iter: iterator (): (A, B); f: expr; iter2: iterator (): (C, D)): iterator (): T
-
map((1,a);(2,b), (k,v2), (10,A);(20,B)) -> (1,A);(2,B)
template mapP*[T, S, U, V](iter: iterator (): T; params, f: expr; iter2: iterator (): U; iter3: iterator (): V): iterator (): S
- Map for 3 parameters
template mapIt*[T, S, U, V](iter: iterator (): T; f: expr; iter2: iterator (): U; iter3: iterator (): V): iterator (): S
- Map for 3 parameters
template mapKV*[A, B, C, D, E, F, T](iter: iterator (): (A, B); f: expr; iter2: iterator (): (C, D); iter3: iterator (): (E, F)): iterator (): T
- Map for 3 parameters
template replaceP*[T](iter: iterator (): T; params, f: expr; value: T): iterator (): T
-
replace(1;2;3;4;5, Q, Q==4, 100) -> 1;2;3;100;5
template replacePV*[T](iter: iterator (): T; params, f: expr; valueF: expr): iterator (): T
-
replace(1;2;3;4;5, Q, Q==4, Q+100) -> 1;2;3;104;5
template replaceIt*[T](iter: iterator (): T; f: expr; value: expr): iterator (): T
-
replaceIt(1;2;3;4;5, it>2, 200) -> 1;2;200;200;200
template replaceKV*[A, B](iter: iterator (): (A, B); f: expr; valueF: expr): iterator (): ( A, B)
-
replaceKV(("one", 1);("two", 2);("three", 3), k=="one", (k, 100)) -> ("one", 100);("two", 2);("three", 3)
template uniqueP*[T](iter: iterator (): T; params, f: expr): iterator (): T
-
unique(1;2;4;3;2;6;5, Q, Q div 5) -> 1;6
template uniqueIt*[T](iter: iterator (): T; f: expr): iterator (): T
-
unique(1;2;4;3;2;6;5, it div 5) -> 1;6
template uniqueKV*[T](iter: iterator (): T; f: expr): iterator (): T
-
unique((1,A);(2,B);(3,B), v) -> (1,A);(2;B)
template foldP*[T](iter: iterator (): T; params, f: expr): T
-
foldP(1;2;3, (P,Q), P+Q) -> 6
template foldP*[T](iter: iterator (): T; params, f: expr; start: T): T
-
foldP(1;2;3, (P,Q), P+Q, 100) -> 106
template foldAB*[T](iter: iterator (): T; f: expr): T
-
foldAB(1;2;3, a+b) -> 6
template foldAB*[T](iter: iterator (): T; f: expr; start: T): T
-
foldAB(1;2;3, a+b, 100) -> 106
template foldListP*[T](iter: iterator (): T; params, f: expr): iterator (): T
-
foldListP(1;2;3, (P,Q), P+Q) -> 1;3;6
template foldListAB*[T](iter: iterator (): T; f: expr): T
-
foldListAB(1;2;3, a+b) -> 1;3;6
template partition*[T](iter: iterator (): T; n: int): iterator (): expr
-
partition(1;2;3;4;5;6,7, 2) -> (1,2);(3,4);(5,6)
template partition*[T](iter: iterator (): T; n, step: int): iterator (): expr
-
partition(1;2;3;4;5, 2,1) -> (1,2);(2,3);(3,4);(4,5)
template partition*[T](iter: iterator (): T; n, step: int; pad: T): iterator (): expr
-
partition(1;2;3;4;5, 2,2,99) -> (1,2);(3,4);(5,99)
template partitionByP*[T, S](iter: iterator (): T; params, f: expr): iterator (): ( S, seq[T])
-
partitionByP(1;2;3;4;5, P, P mod 3==0) -> @[1,2];@[3];@[4,5]
template partitionByIt*[T, S](iter: iterator (): T; f: expr): iterator (): (S, seq[T])
-
partitionByIt(1;2;3;4;5, it mod 3==0) -> @[1,2];@[3];@[4,5]
template partitionByKV*[T, S](iter: iterator (): T; f: expr): iterator (): (S, seq[T])
-
partitionByKV((1,a);(2,a);(3,b);(4,b);(5,c), v) -> @[(1,a),(2,a)];@[(3,b),(4,b)];@[(5,c)]
template wrapIter*[T](iter: expr): iterator (): T
-
wrapIter(walkFiles("*")) -> "a.nim"; "b.nim"; ...
template createIterFor2Params*(name: expr): stmt
-
Creates public functions from functions with 2 parameters. The resulting functions can take an interator in its first or second parameter, or both
createIterFor2Params `+` (1;2;3;4) + (10;20;30) -> 11;22;33
template createIterFor1Param*(name: expr): stmt
-
Creates public functions from functions with 1 parameter. The resulting functions can take an interator in its first parameter.
createIterFor1Param `not` not (false;false;true) -> true;true;false