Lua中 sieve.lua 的源码分析

[b]-- sieve.lua
-- the sieve of Eratosthenes programmed with coroutines
-- typical usage: lua -e N=500 sieve.lua | column

-- generate all the numbers from 2 to n
function gen (n)
return coroutine.wrap(function ()
for i=2,n do
coroutine.yield(i)[b]

end
end)
end

-- filter the numbers generated by `g', removing multiples of `p'
function filter (p, g)
return coroutine.wrap(function ()
for n in g do --循环取模 g集合中是前面满足条件的所有素数
print("this is ",n,p)
if n%p ~= 0 then coroutine.yield(n) end--返回满足条件的素数
end
end)
end

N=N or 20 -- from command line
x = gen(N) -- generate primes up to N  返回一个协作程序(线程)
while 1 do
local n = x() -- pick a number until done 调用一次,返回下一个素数
if n == nil then break end --如果没有下一个,则程序中止
print(n) -- must be a prime number
x = filter(n, x) -- now remove its multiples
end
[/b][/b]

你可能感兴趣的:(lua)