I have two iterators.  I would like to run them in parallel, creating
an iterator that generates arrays containing one element from each.

That is, I'd like to write 'combine' so that I can say:

  def it1 ()
    yield 1; yield 2; yield 3
  end

  def it2 ()
    yield 4; yield 5; yield 6
  end

  combine('it1','it2') { |x|
    # x is (1, 4), then (2, 5), then (3, 6)
  }

Some more things:

 - I don't want to have to modify it1 and it2 in order to write combine.
 - Ideally, combine could take an arbitrary number of iterators as
   arguments.
 - Assume that the iterators cannot just be rewritten to provide a big
   array all at once instead of iterating.

I imagine this could be done with threads (ew).  I bet it could be
done with continuations, but I spent a few hours last night and didn't
get anywhere (I still have trouble understanding continuations).  Or
maybe there's some built-in language support that I haven't found yet.

Can anyone solve this puzzle?

-- 
                 Dan Schmidt | http://www.dfan.org
Honest Bob CD now available! | http://www.dfan.org/honestbob/cd.html