豊福@パパイヤです。

けいじゅさん
> 通常のストリームの場合は, nextを実装することによっていろいろの機能が付
> 加されるんですが, それとは違い, Enumeratableのeachは最後まで繰り返そう
> としますので, 無限に生成するストリームに対して, Enumeratableをインクルー
> ドするのは無理がないでもないですね.

  そうですね。to_a なんか無限ループになるからダメだし。
今のままの Sieve で使える Enumerable のメソッドは停止条件を
入れられる find くらいでしょうか。
  ex.
    s.find {|p| p > 1500 || (a, b = (2**(p-1) - 1).divmod(p*p))
                b == 0 }

> rubyでは, スーパークラスは1つしか持てません. 一方モジュール
> は複数インクルードできますので, 抽象クラスになるものはモジュールにでき
> るかどうか検討する価値はあると思います.

  なるほど。メモ、メモ。

> * ライブラリとして使うには, Stream#out はいただけない.
> outという名前は深い意味があるのでしょうか? もしそうじゃなければ, もう
> ちょっと適当な名前に変えた方がよいかも知れません. 良く使う名前としては
> nextがありますが, rubyではnextは予約語(になる予定)なので使えません.

  元ネタにした C++版での変数名、メソッド名をそのまま使い
ました。英語がネイティブの人が書いたプログラムのようでした
ので。

 ***

  明日(13日)のセミナにぎりぎり申し込めました。
---
			豊福@パパイヤ
			unbound / papaya.juice.or.jp
			toyofuku / juice.or.jp