From: keiju@... (Keiju ISHITSUKA) Date: 1998-06-30T14:50:17+09:00 Subject: [ruby-dev:3120] Re: Enumerable#reverse ([ruby-list:8579]) けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :3086 ] the message: "[ruby-dev:3086] Re: Enumerable#reverse ([ruby-list:8579]) ", on Jun/29 18:21(JST) GOTO Kentaro writes: >ごとけんです >reverse は Enumerable のなかでなにか特殊ではないか >という ruby-list の話題の続きです。 こういう話しになるとしゃしゃり出てきたくなります(^^;;; >>が,その後ちょっと考えてみるとやっぱり若干reverseは特殊です >>ね.というのも他のEnumerableのメソッドは,石塚さんの指摘通り, >>要素数が有限であることを仮定しているものはありますが,要素に >>順序が存在する事を仮定していないんです.あくまでもeachが返し >>た順序はたまたまその順序であったと.ところがreverseだけは >>「eachが要素を与えた順番」に注目しているんですね. > >>で,どうしようか.reverseはなくすか…. > >ちょっと進めて考えると将来的には実装の許す場合は並 >行して each されるべき Enumerable (もしくは Bag) と >逐次 each される Sequence というのがあってもいいやも >知れません。 ruby流ならSequenceableですね(^^;;; これは有限って前提もついているんですよね. >で、そう考えて reverse は、さらに head や tail, etc >を加えた Sequence という新しいモジュールに移すことを >提案します。 tailがあるくらいですから(^^;;; ということは私が以前に提案したIndexableと近いモジュールになると思いま す. こちらは, 有限でindexで[], []=ができることになりますので, Sequence よりも[]=ができるぶんだけちょっと性質が強いことになりますが... >ただし、当面、互換性のために reverse は Enumerable >に残すがドキュメントに "will be obsolete in ruby-1.2" >と添える、に一票(つまり年内に消去ですね ^^;)。 >なお、石坂さんの指摘から浮かぶ pure な "finite 石塚? >set" と "enumerable set" を分けたいような気もするけ >ど、それをゆーなら "totally ordered set" と >"partially ordered set" を分けたいような気もときど >きするのでこれは許容範囲と僕も思います。むしろ逆に >Countable(Set) とか言うモジュールを提供する方がプロ >グラミング言語としては自然でわないでしょうか? Countable(Set)ってどういうモジュールですか? 言葉からすると Countable <=> "数えあげられる" <=> Enumerable って気がするんですが?? >以前まつもとさんが指摘されたように、クラス階層は所詮実装の継承の階層 >なのでブルバキ的な数学の公理体系を踏襲してもあまりうれしくないですし。 ブルバキって公理主義じゃなくて構成主義だと思いますですので, こういうク ラスを組み立てていく時には, 役に立つと思っているのですが... # Numeric回りのクラスはまさにこの考えに近いかなと... ># ところでみなさんは半順序を扱わないのでしょうか? ># つまり <=> が -1,0,1 以外に false もあるような ># 集合の包含関係に代表される順序を。 ># やっぱりそんなことは sml とかに任せれば良いのかなあ そうですねえ... プログラム上使いたい場面ってあるんですかね? いや. もし 使ったとしても, 半順序関係をサポートしてくれるクラスが存在すると何か嬉 しいことがでてくるんですかね? __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---