Lispに移植したり、参考にして書いたりしているときに、クラスメソッドに相当する挙動が欲しくなったりするのですが、メタクラスの構成が違うので、そのまま書き写しただけでは、思ったような挙動にはなりません。methodsbarクラスに対してはfooのクラスメソッドを起動しません。Lispでは、クラスメタオブジェクトのクラスをメタクラスと呼んでいるだけなので、同じメタクラスのクラスメタオブジェクト間に継承関係はありません。LispでもSmalltalk/Rubyのようにクラス生成時に継承関係と同じメタクラスを作ってしまうという方法が一つの解決策です。以下のリンクは、shiroさんが以前にPython風のクラスメソッドが欲しいという質問に回答した例ですhttps://gist.github.com/shirok/732333class-prototypeを使うクラスメソッドは、クラスの継承関係を利用するインスタンスを生成しなくても起動できるというのがメリットですが、よくよく考えてみれば、クラスの継承関係を利用できて、インスタンスを生成しなくても起動できさえすれば問題は解決とすると、クラス定義ごとに存在するclass-prototypeを利用してディスパッチすれば良さそうです。クラスメソッドのnewのようなものは以下のように書けるでしょう。40200C87EB>上記例は大分持って回った感じですが、とりあえずclass-prototypeを経由すればOKです。クラスメソッド的な例を考えるもうすこしクラスメソッド的な例としてインスタンスの集合を扱う例を考えてみます。prototype.生成されたインスタンスとプロトタイプが混ざるという潜在的な問題はあるので、上記では、prototype型を定義して弾いてみることにしました。プロトタイプを利用しているので、集合に対する演算の度にインスタンスが生成されて母数が変化してしまうような問題もないことが分かるかと思います。Lisp(MOP)では、クラス生成時に(当然ながら)継承関係を保持したプロトタイプが生成されます。Lispでのクラスメソッド問題も解決できそうな気がしていますがどうでしょう。