blob: 37313d4d7ee95fb9e1d4166d140aabd264935984 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
discard """
output: '''0
1
2
3
4
5
6
7
8
9
10
5 5
7 7
9 9
0
0
0
0
1
2
70'''
"""
when true:
proc main() =
let
lo=0
hi=10
iterator itA(): int =
for x in lo..hi:
yield x
for x in itA():
echo x
var y: int
iterator itB(): int =
while y <= hi:
yield y
inc y
y = 5
for x in itB():
echo x, " ", y
inc y
main()
iterator infinite(): int {.closure.} =
var i = 0
while true:
yield i
inc i
iterator take[T](it: iterator (): T, numToTake: int): T {.closure.} =
var i = 0
for x in it():
if i >= numToTake:
break
yield x
inc i
# gives wrong reasult (3 times 0)
for x in infinite.take(3):
echo x
# does what we want
let inf = infinite
for x in inf.take(3):
echo x
# bug #3583
proc foo(f: (iterator(): int)) =
for i in f(): echo i
let fIt = iterator(): int = yield 70
foo fIt
|