[#6219] Ruby連載 第4話 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/04
[#6221] Re: Ruby連載 第4話 — Shin-ichiro HARA <sinara@...> 1998/02/04

原です。

[#6224] Re: Ruby連載 第4話 — Yasunari Momoi <conan@...> 1998/02/04

ももちゃん@あるもにこすです.

[#6225] Re: Ruby連載 第4話 — matz@... (Yukihiro Matsumoto) 1998/02/04

まつもと ゆきひろです

[#6249] Re: i++ — 助田 雅紀 <masaki.suketa@...>

助田です。

33 messages 1998/02/04
[#6252] Re: i++ — gotoken@... (GOTO Kentaro) 1998/02/05

ことけんです

[#6255] Re: i++ — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#6260] Re: i++ — Yuji Shigehiro <sigehiro@...> 1998/02/05

しげひろです.

[#6314] RE: ruby's design policy (Re: I'd like to subscr ibe this ML) — 助田 雅紀 <masaki.suketa@...>

オブジェクト指向周辺をぶらぶらしている助田です。

11 messages 1998/02/06

[#6333] ruby 流に添削して下さい — nkon@...2.3web.ne.jp

13 messages 1998/02/07
[#6335] Re: ruby 流に添削して下さい — OZAWA Sakuro <crouton@...> 1998/02/07

さくです.

[#6372] ruby 1.1b7 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

24 messages 1998/02/10
[#6402] parsedate (Re: ruby 1.1b7 released) — WATANABE Hirofumi <watanabe@...> 1998/02/13

わたなべです.

[#6405] Re: parsedate (Re: ruby 1.1b7 released) — Tadayoshi Funaba <tadf@...> 1998/02/13

ふなばです。

[#6407] Re: parsedate (Re: ruby 1.1b7 released) — matz@... (Yukihiro Matsumoto) 1998/02/13

まつもと ゆきひろです

[#6373] call for scripts — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

133 messages 1998/02/10
[#6414] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/14

金城です.

[#6428] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6448] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/16

金城です.

[#6452] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/17

まつもと ゆきひろです

[#6481] Re: call for scripts — Kikutani Makoto <kikutani@...> 1998/02/17

きくたに@ぷ〜たろ〜です。

[#6483] Re: call for scripts — OZAWA Sakuro <crouton@...> 1998/02/17

さくです.

[#6495] Re: call for scripts — WATANABE Hirofumi <watanabe@...> 1998/02/18

わたなべです.

[#6416] Re: call for scripts — shugo@... (Shugo Maeda) 1998/02/14

前田です。

[#6417] rgrep (Re: call for scripts) — shugo@... (Shugo Maeda) 1998/02/15

前田です。

[#6423] Re: rgrep (Re: call for scripts) — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6612] Re: call for scripts — Tadayoshi Funaba <tadf@...> 1998/02/21

ふなばです。

[#6582] File::Separator on cygwin — OZAWA Sakuro <ozawa@...>

小澤さくです。

19 messages 1998/02/20
[#6583] Re: File::Separator on cygwin — WATANABE Hirofumi <watanabe@...> 1998/02/20

わたなべです.

[#6586] Re: File::Separator on cygwin — OZAWA Sakuro <ozawa@...> 1998/02/20

小澤さくです。

[#6591] ruby 1.1b8 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/20
[#6620] rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/22

前田です。

[#6629] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

けいじゅ@日本ラショナルソフトウェアです.

[#6643] Re: rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/23

前田です。

[#6649] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

けいじゅ@日本ラショナルソフトウェアです.

[#6650] Re: rbc.rb and binding — matz@... (Yukihiro Matsumoto) 1998/02/23

まつもと ゆきひろです

[#6667] JRI 0.5 worked (was Re: rbc.rb and binding) — OZAWA Sakuro <crouton@...> 1998/02/23

さくです.

[#6687] Re: JRI 0.5 worked (was Re: rbc.rb and binding) — shugo@... (Shugo Maeda) 1998/02/24

前田です。

[#6712] JRI and JDBC — OZAWA Sakuro <ozawa@...> 1998/02/24

小澤さくです。

[#6635] hello — WATANABE Tetsuya <tetsu@...>

渡辺哲也と申します。

15 messages 1998/02/23

[#6706] Re: Counter class — toyofuku@...

豊福@パパイヤです。

12 messages 1998/02/24

[#6735] Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda)

前田です。

27 messages 1998/02/24
[#6746] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/25

けいじゅ@日本ラショナルソフトウェアです.

[#6747] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6752] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6754] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6756] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6786] Re: Mutex/ConditionVariable/Queue — senda@...

From: shugo@po.aianet.ne.jp (Shugo Maeda)

33 messages 1998/02/26
[#6791] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6794] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6796] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/26

けいじゅ@日本ラショナルソフトウェアです.

[ruby-list:6701] prime generator [ 8-queen ]

From: keiju@... (石塚圭樹 )
Date: 1998-02-24 04:36:19 UTC
List: ruby-list #6701
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-list :06601 ] the message: "[ruby-list:6601] 8-queen ", on
Feb/20 20:49(JST) TAKAHASHI Masayoshi writes:

>高橋です。今度ちゃんと1.1b7にします……と書こうとしたら、b8になって
>いるし……。
>
>パズル関係がほしい、ということだったので(どうしてなのでしょうか?)、
>8-queenを作ってみました。生まれてはじめてスレッドを使ってみました(^^)
>が、あんまり意味はないです(^_^;  順列を生成するイテレータを使っている
>のがrubyっぽいかも。

そうですね. 解を求めるのにthreadを用いているとことが目新しいと思います.
8-queenもそうですが, stream列の計算に時間がかかる場合に有効かも知れま
せんね.

[ruby-list:4455]前後あたりで, 豊福@パパイヤさんが作られたエラトステネ
スのふるいをthreadを用いて作り直してみました.

  prime-th.rb
  prime-th2.rb

prime-th.rbは1つだけthreadを用いています. prime-th.rbは素数の数だけ
threadを生成する例です. 

実行してみるとわかりますが, prime-th2.rbはスレッドを大量に生成するせい
かちょっと重いですね.

ところで, このプログラムで変なところがあるのですが...

prime-th.rbでSieve::Filter#succが

    def succ
      for n in @source
	if n % @factor != 0
	  break
	end
      end
      n
    end

となっていますが, これを

    def succ
      for n in @source
	if n % @factor != 0
	  retuen n
	end
      end
    end

とすると, 動作しなくなります. n==nilでないのにreturn nでnilを返してい
るようです. ちょっと調べてもらえませんでしょうか? 

# ruby 1.1b7を使っています.

-- prime-th.rb
require "thread"

module Stream
    include Enumerable
    def each
      loop do
	yield succ
      end
    end

    def succ
      raise NotImplementError, "need to define `succ'"
    end
end

class Sieve 
  include Stream

  QUEUE_MAX = 10

  class Counter
    include Stream

    def initialize(v)
      @value = v
    end
    def succ
      @value += 1
      return @value - 1
    end

    def inspect
      format("#<Counter: %d >", @value)
    end
  end

  class Filter
    include Stream

    def initialize(src, f)
      @source = src
      @factor = f
    end

    def succ
      for n in @source
	if n % @factor != 0
	  break
	end
      end
      n
    end

    def inspect
      format("#<Filter: @factor=%d, @source=%s>", @factor, @source.inspect)
    end
  end

  def initialize
    @source = Counter.new(2)
    @queue = SizedQueue.new(QUEUE_MAX)
    @thread = Thread.start {
      loop do
	n = @source.succ
	@queue.push n
	@source = Filter.new(@source, n)
      end
    }
  end

  def succ
    @queue.pop
  end

  def inspect
    format("#<Sieve: @source=%s>", @source.inspect)
  end

end

if ! max = ARGV.shift; max = 100; end
max = max.to_i

primes = Sieve.new

for n in primes
    if n > max
        break
    end
    print n, "\n"
end

--ここからprime-th2.rb

require "thread"

module Stream
    include Enumerable
    def each
      loop do
	yield succ
      end
    end

    def succ
      raise NotImplementError, "need to define `succ'"
    end
end

class Sieve 
  include Stream

  QUEUE_MAX = 1000

  class Counter
    include Stream

    def initialize(v)
      @value = v
      @queue = SizedQueue.new(QUEUE_MAX)
      @thread = Thread.start {
	loop do 
	  @queue.push @value
	  @value += 1
	end
      }
    end

    def succ
      @queue.pop
    end

    def inspect
      format("#<Counter: %d >", @value)
    end
  end

  class Filter
    include Stream

    def initialize(src, f)
      @source = src
      @factor = f

      @queue = SizedQueue.new(QUEUE_MAX)

      @thread = Thread.start {
	for n in @source
	  if n % @factor != 0
	    @queue.push n
	  end
	end
      }
    end

    def succ
      @queue.pop
    end

    def inspect
      format("#<Filter: @factor=%d, @source=%s>", @factor, @source.inspect)
    end
  end

  def initialize
    @source = Counter.new(2)
    @queue = SizedQueue.new(QUEUE_MAX)
    @thread = Thread.start {
      loop do
	n = @source.succ
	@queue.push n
	@source = Filter.new(@source, n)
      end
    }
  end

  def succ
    @queue.pop
  end

  def inspect
    format("#<Sieve: @source=%s>", @source.inspect)
  end

end

if ! max = ARGV.shift; max = 100; end
max = max.to_i

primes = Sieve.new

#sleep 10

for n in primes
    if n > max
        break
    end
    print n, "\n"
end








__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread