Lua chunk iterator for fixed-size batches

Lua
local function chunks(seq, size)
  assert(size >= 1, 'chunk size must be at least 1')
  local i = 0
  return function()
    local first = i + 1
    if first > #seq then return nil end
    local last = math.min(first + size - 1, #seq)
    i = last
    local part = {}
    for j = first, last do part[#part + 1] = seq[j] end
    return part, first
  end
end

local it = chunks({ 1, 2, 3, 4, 5, 6, 7 }, 3)
for part, start in it do
  print(start, table.concat(part, ','))
end