ごとけんです

reverse は Enumerable のなかでなにか特殊ではないか
という ruby-list の話題の続きです。

In message "[ruby-list:8579] Re: Enumerable#reverse"
    on 98/06/29, Yukihiro Matsumoto <matz / netlab.co.jp> writes:

>|>sortなどにくらべてreverseが特別にアレというような理由がある
>|>んでしょうか.私自身はshort cutとして妥協できる範囲内だと感
>|>じているのですが.

>が,その後ちょっと考えてみるとやっぱり若干reverseは特殊です
>ね.というのも他のEnumerableのメソッドは,石塚さんの指摘通り,
>要素数が有限であることを仮定しているものはありますが,要素に
>順序が存在する事を仮定していないんです.あくまでもeachが返し
>た順序はたまたまその順序であったと.ところがreverseだけは
>「eachが要素を与えた順番」に注目しているんですね.

>で,どうしようか.reverseはなくすか….

ちょっと進めて考えると将来的には実装の許す場合は並
行して each されるべき Enumerable (もしくは Bag) と
逐次 each される Sequence というのがあってもいいやも
知れません。

で、そう考えて reverse は、さらに head や tail, etc
を加えた Sequence という新しいモジュールに移すことを
提案します。
ただし、当面、互換性のために reverse は Enumerable 
に残すがドキュメントに "will be obsolete in ruby-1.2"
と添える、に一票(つまり年内に消去ですね ^^;)。


なお、石坂さんの指摘から浮かぶ pure な "finite
set" と "enumerable set" を分けたいような気もするけ
ど、それをゆーなら "totally ordered set" と 
"partially ordered set" を分けたいような気もときど
きするのでこれは許容範囲と僕も思います。むしろ逆に 
Countable(Set) とか言うモジュールを提供する方がプロ
グラミング言語としては自然でわないでしょうか? 以前
まつもとさんが指摘されたように、クラス階層は所詮実
装の継承の階層なのでブルバキ的な数学の公理体系を踏
襲してもあまりうれしくないですし。

# ところでみなさんは半順序を扱わないのでしょうか?
# つまり <=> が -1,0,1 以外に false もあるような
# 集合の包含関係に代表される順序を。
# やっぱりそんなことは sml とかに任せれば良いのかなあ

-- gotoken