原です。

>正木です。ruby-list から移って来ました。

いらっしゃいませ。文字化けはすっかり直りましたね。(^^


>|でもやっぱり Sequence の第二引数以降はいらないと思います。Seuence に汎用
>|性を持たせたいので、使途不明(?)なパラメータは排除しておきたいからです。
>
>これは block 内の変数の scope を block 内に限りたいためです。
>変数の scope の問題は一番間違えやすいので、余計な神経を使いたくないからで
>す。
>parameter を明示的に渡すことにするだけなので、汎用性を失うことにはなりません。

分かります。こういうやり方はあると思います。


>|それと、漸化式は文字列でなくブロックで与えた方が気持ちがいいです。数式処理
>|をするなら別ですが、文字列に入るのは Ruby のコードですから、Ruby のコード
>|は地のコードにしておきたいという気持ちがあります。
>
>これが気になったので、block を(main にではなく)直接 instance に
>渡す方法を ruby-list で質問したわけですが、今の仕様では私の期待した
>様な方法はないようです。
>(必要もないのにわざわざ文字列を block に渡しているのは、本当は
>文字列ではなく block だと言うことを示すためです。)

私も、block が固有のローカル変数をもてたらいいなあ、とは思います。


また、ちょっと正木さんのコードの感想をいいますと、

>Prime =Sequence.new([2,3]){"|n|
>   m=self[n-1]+2
>   m+=2 while self.find{|k| break if k*k>m; m%k==0}
>   m "}

今のコードは String オブジェクトを eval して Proc オブジェクトを作
り、それを call してますよね。eval することと、call することは似た
ところがあり、何か同じことを2重にしてしまっている気がします。

それと、コードを文字列にして eval するということは、変数が eval した
場所のスコープに入るので、ブロックの使用以上に干渉に注意が必要になって
しまいませんか?例えば

Sequence.new(list){"|x| f(x)"}

と

Sequence.new(list){"|t| f(t)"}

で違う結果を得る可能性がありますよね。


>実数 class の候補を色々用意しておいて、その中から一つ選んで
>alias Real Sequence
>とできると便利だと思いますが、class 名の alias は無いみたいですね。

これは、

Real = Sequence

でどうでしょう。クラスもオブジェクトで、クラス名と同名の定数に代入され
ているだけなのでこういうことができるのです。