[#5218] Ruby Book Eng tl, ch1 question — Jon Babcock <jon@...>

13 messages 2000/10/02

[#5404] Object.foo, setters and so on — "Hal E. Fulton" <hal9000@...>

OK, here is what I think I know.

14 messages 2000/10/11

[#5425] Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...>

18 messages 2000/10/11
[#5427] RE: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — OZAWA -Crouton- Sakuro <crouton@...> 2000/10/11

At Thu, 12 Oct 2000 03:49:46 +0900,

[#5429] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...> 2000/10/11

Thanks for the input.

[#5432] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Yasushi Shoji <yashi@...> 2000/10/11

At Thu, 12 Oct 2000 04:53:41 +0900,

[#5516] Re: Some newbye question — ts <decoux@...>

>>>>> "D" == Davide Marchignoli <marchign@di.unipi.it> writes:

80 messages 2000/10/13
[#5531] Re: Some newbye question — matz@... (Yukihiro Matsumoto) 2000/10/14

Hi,

[#5544] Re: Some newbye question — Davide Marchignoli <marchign@...> 2000/10/15

On Sat, 14 Oct 2000, Yukihiro Matsumoto wrote:

[#5576] Re: local variables (nested, in-block, parameters, etc.) — Dave Thomas <Dave@...> 2000/10/16

matz@zetabits.com (Yukihiro Matsumoto) writes:

[#5617] Re: local variables (nested, in-block, parameters, etc.) — "Brian F. Feldman" <green@...> 2000/10/16

Dave Thomas <Dave@thomases.com> wrote:

[#5705] Dynamic languages, SWOT ? — Hugh Sasse Staff Elec Eng <hgs@...>

There has been discussion on this list/group from time to time about

16 messages 2000/10/20
[#5712] Re: Dynamic languages, SWOT ? — Charles Hixson <charleshixsn@...> 2000/10/20

Hugh Sasse Staff Elec Eng wrote:

[#5882] [RFC] Towards a new synchronisation primitive — hipster <hipster@...4all.nl>

Hello fellow rubyists,

21 messages 2000/10/26

[ruby-talk:5245] Re: Running two iterators in parallel

From: matz@... (Yukihiro Matsumoto)
Date: 2000-10-02 23:27:51 UTC
List: ruby-talk #5245
In message "[ruby-talk:5239] Running two iterators in parallel"
    on 00/10/03, Dan Schmidt <dfan@harmonixmusic.com> writes:

|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?

Use threads.

  require 'thread'

  def combine(*args)
    queues = []
    for it in args
      queue = Queue.new
      Thread.start(it, queue) do |i,q|
        self.send(it) do |x|
          q.push x
        end
      end
      queues.push queue
    end
    begin
      loop do
        ary = []
        for q,th in queues
          ary.push q.pop
        end
        yield ary
      end
    rescue ThreadError
      # no more items, exit
    end
  end

-- 
							matz.

In This Thread