GMTうまいタイトルが考えつかなかったので、「ECLOSのメタクラス継承」というタイトルになりましたが、ECLOSが提供するdefclassの:metaclassオプション省略時のメタクラスの自動算出についてです。CLOSに詳しいので参照してください。Lispでは、カスタマイズしたメタクラスをdefclassで利用する際には明示的に:metaclassを指定しないといけないのですが、結構めんどうです。上記文献によれば、ECLOSは、defclassに:metaclassがあればそれを使う指定がなければ、ダイレクトスーパークラスの集合をSとする。それらのメタクラスの集合をM(S)とする。Sの要素のサブクラス関係の推移閉包の集合をM*(S)とする。M*(S)の要素の共通部分をTとする。Tがサブクラス関係の木を成していれば、その根を、さもなくば、standard-classをメタクラスとするというアルゴリズムでこの問題を解決します。解釈に自信がありませんが、とりあえずそのままコードにしてみました。CLOSのものが手頃だったので、これを利用しています。class-options)))動作確認さて、定義できたので動作を確認していきます。b-class)))a-class、b-class、c-classとメタクラスを定義し、a-classをメタクラスとしたa、b-classをメタクラスとしたbを作成します。())とした場合に、cのメタクラスが適切に求まれば良いのですが、上記で定義したcompute-metaclassで確認してみます。40202BE5AB>とりあえず大丈夫そうなので、eclos:defclassを使ってcを定義してみます。402072C593>まとめ以上の動作をみて分かるように、メタクラスを多重継承する場合は、予め多重継承したメタクラスを用意しておく必要がありますが、用意さえしておけば勝手に見付けてくれるのが便利といえば便利かもしれません。メタクラス継承の自動算出は、STklos、Guile、Gauche等のSTklos系OOPSでも行なわれています。Lispで実装してみます。