阪口と申します。多分識者?からもフォローがあると思いますが、

In message <20080830171137.d8183aad.ruby / i-mail.jp> 2008-08-30T17:09+0900,
	Akira Hayakawa <ruby / i-mail.jp> wrote:
> 納得しました。==は鬼門なんですね。

そうではなくて、リファレンスマニュアルの組み込みクラスObjectの==の
説明にある通り、クラスを定義する時にそのクラスのオブジェクトの
性質に合わせた「等しさ」を定義する==メソッドを定義すべきだと言う
ことです。
http://www.ruby-lang.org/ja/man/html/Object.html#self.3d.3d

「同一オブジェクトである」という比較は全クラス共通に実装
できますが、「等しい」というのはクラス毎に意味が変わるので、
オブジェクト指向のプログラミング言語ではどれも同様です。

> equalが、「2つのオブジェクトのすべての属性がすべてequalなら正しい」という感じの仕様なら使い勝手が良いのですが、
> こういう再帰は実装するのは不可能なんでしょうか?

原理的には不可能ではないと思います。ただ属性(というかインスタンス変数の
値ですね)が環状に参照する可能性を考慮すると、性能が厳しいでしょうね。
(そういう場合に「止まらなくても良い」と言うメソッドなら簡単に定義できますが:-)

PS. この辺のことは今年50周年のLispで学び、Smalltalk-80で実感させられました。
--
阪口哲男@図書館情報メディア研究科.大学院.筑波大学
Tetsuo SAKAGUCHI.
Graduate School of Library, Information and Media Studies
University of Tsukuba, JAPAN.