rev |
line source |
jbe@19
|
1 require "seqlua"
|
jbe@19
|
2
|
jbe@19
|
3 t = {"a", "b", "c"}
|
jbe@19
|
4
|
jbe@19
|
5 for i, v in ipairs(t) do
|
jbe@19
|
6 print(i, v)
|
jbe@19
|
7 end
|
jbe@19
|
8 -- prints:
|
jbe@19
|
9 -- 1 a
|
jbe@19
|
10 -- 2 b
|
jbe@19
|
11 -- 3 c
|
jbe@19
|
12
|
jbe@19
|
13 function alphabet(from, to)
|
jbe@19
|
14 local letter = nil
|
jbe@19
|
15 return function()
|
jbe@19
|
16 if letter == nil then
|
jbe@19
|
17 letter = from
|
jbe@19
|
18 elseif letter == to then
|
jbe@19
|
19 return nil
|
jbe@19
|
20 else
|
jbe@19
|
21 letter = string.char(string.byte(letter) + 1)
|
jbe@19
|
22 end
|
jbe@19
|
23 return letter
|
jbe@19
|
24 end
|
jbe@19
|
25 end
|
jbe@19
|
26
|
jbe@19
|
27 f = alphabet("a", "z")
|
jbe@19
|
28
|
jbe@19
|
29 for i, v in ipairs(f) do
|
jbe@19
|
30 print(i, v)
|
jbe@19
|
31 end
|
jbe@19
|
32 -- prints:
|
jbe@19
|
33 -- 1 a
|
jbe@19
|
34 -- 2 b
|
jbe@19
|
35 -- 3 c
|
jbe@19
|
36 -- ...
|
jbe@19
|
37 -- 25 y
|
jbe@19
|
38 -- 26 z
|
jbe@19
|
39
|
jbe@19
|
40 c = setmetatable(
|
jbe@19
|
41 { iter = alphabet("a", "f") },
|
jbe@19
|
42 { __call = function(t) return t.iter() end }
|
jbe@19
|
43 )
|
jbe@19
|
44
|
jbe@19
|
45 for i, v in ipairs(c) do
|
jbe@19
|
46 print(i, v)
|
jbe@19
|
47 end
|
jbe@19
|
48 -- prints:
|
jbe@19
|
49 -- 1 a
|
jbe@19
|
50 -- 2 b
|
jbe@19
|
51 -- 3 c
|
jbe@19
|
52 -- 4 d
|
jbe@19
|
53 -- 5 e
|
jbe@19
|
54 -- 6 f
|
jbe@19
|
55
|
jbe@19
|
56 g = coroutine.wrap(function()
|
jbe@19
|
57 coroutine.yield("Alice")
|
jbe@19
|
58 coroutine.yield("Bob")
|
jbe@19
|
59 for i = 1, 3 do
|
jbe@19
|
60 coroutine.yield("Person #" .. tostring(i))
|
jbe@19
|
61 end
|
jbe@19
|
62 end)
|
jbe@19
|
63
|
jbe@19
|
64 for i, v in ipairs(g) do
|
jbe@19
|
65 print(i, v)
|
jbe@19
|
66 end
|
jbe@19
|
67 -- prints:
|
jbe@19
|
68 -- 1 Alice
|
jbe@19
|
69 -- 2 Bob
|
jbe@19
|
70 -- 3 Person #1
|
jbe@19
|
71 -- 4 Person #2
|
jbe@19
|
72 -- 5 Person #3
|
jbe@19
|
73
|
jbe@19
|
74 function filter(f, iter, iter_s, iter_i)
|
jbe@19
|
75 return coroutine.wrap(function()
|
jbe@19
|
76 for i, v in ipairs(iter, iter_s, iter_i) do f(v) end
|
jbe@19
|
77 end)
|
jbe@19
|
78 end
|
jbe@19
|
79
|
jbe@19
|
80 function filterfunc(v)
|
jbe@19
|
81 local type_v = type(v)
|
jbe@19
|
82 if type_v == "string" then
|
jbe@19
|
83 coroutine.yield(v)
|
jbe@19
|
84 elseif type_v == "number" then
|
jbe@19
|
85 for i = 1, v do
|
jbe@19
|
86 coroutine.yield(true)
|
jbe@19
|
87 end
|
jbe@19
|
88 end
|
jbe@19
|
89 end
|
jbe@19
|
90
|
jbe@19
|
91 for v in filter(filterfunc, {"a", "b", 3, "c"}) do
|
jbe@19
|
92 print(v)
|
jbe@19
|
93 end
|
jbe@19
|
94 -- prints:
|
jbe@19
|
95 -- a
|
jbe@19
|
96 -- b
|
jbe@19
|
97 -- true
|
jbe@19
|
98 -- true
|
jbe@19
|
99 -- true
|
jbe@19
|
100 -- c
|
jbe@19
|
101
|
jbe@19
|
102 set = {apple = true, banana = true}
|
jbe@19
|
103 for i, k, v in ipairs(pairs(set)) do
|
jbe@19
|
104 print(i, k, v)
|
jbe@19
|
105 end
|
jbe@19
|
106 -- prints:
|
jbe@19
|
107 -- 1 banana true
|
jbe@19
|
108 -- 2 apple true
|
jbe@19
|
109 -- (order of "apple" and "banana" may vary)
|
jbe@19
|
110
|