豊福@パパイヤです。 けいじゅさん > 通常のストリームの場合は, 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