lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


>I am
>interested in concurrent execution of multiple scripts within a LUA state,
>cooperative 'multitasking' that is.

This is implemented in Lua 5.0w0.
Here is an example program by Roberto that finds primes. Sorry for the
comments in Portuguese.
--lhf

-- co-rotina para gerar todos os números de 2 a n
function gen (n)
  return coroutine.create(function ()
    for i=2,n do coroutine.yield(i) end
  end)
end

-- co-rotina que filtra os números gerados por 'g', tirando os múltiplos
-- de 'p'
function filter (p, g)
  return coroutine.create(function ()
    while 1 do
      local n = g()
      if n == nil then return end
      if math.mod(n, p) ~= 0 then coroutine.yield(n) end
    end
  end)
end

x = gen(1000)   -- gerador inicial
while 1 do
  local n = x()   -- pega um número
  if n == nil then break end    -- acabou?
  print(n)   -- número é primo
  x = filter(n, x)   -- tira fora seus múltiplos
end