>>92
ありがとうございます。ですが、メッセージ名を気をつけても、現実としてメッセージ名の
衝突は起こると思います。

たとえばC++で申し訳ないんですが、
class Foo
{
virtual void update() = 0;
};

class Bar
{
virtual void update(bool flag) = 0;
};
があるとすると、メッセージ名がupdateと同じでもメッセージのプロトコルが違います。
C++なら単一ディスパッチなので、メッセージ送信先とメッセージ名で呼ぶべきメッセー
ジのプロトコルが定まります。
ですが同じことをCommon Lispでしようとしたら、パッケージにくるんで、呼び出し元で

(foo:update foo-instance)
(bar:update bar-instance t)

とする方法か、もしくは総称関数を

(defgeneric update (o &rest rest))

と定義するくらいしか思いつきません。前者はどうみても冗長ですし、後者はCommon Lisp
の引数チェック機構が死にます。

根本的に勘違いしてる可能性もありますが、うまい方法はないでしょうか。