Google
ブログ(iiyu.asablo.jpの検索)
ホットコーナー内の検索
 でもASAHIネット(asahi-net.or.jp)全体の検索です。
 検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。
 例 中村(show) ki4s-nkmr

ウェブ全体の検索

Rubyの特異メソッドとCLOSのeql specializer2007年01月13日 00時43分29秒

ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
http://blog.livedoor.jp/dankogai/archives/50689356.html
オブジェクトは難しくない。難しいのはクラス
で話題にしてあるRubyの特異メソッドは、Common LispのCLOS(Common Lisp
Object System, クロスやシーロスと読む) では、defmethodのeql specializerで実現できる。
 というか、Common Lispのeql specilizerをRubyで実装したのが、特異メソ
ッドだと思う。
 CLOSのeql specializerの例を
http://www.asahi-net.or.jp/~ki4s-nkmr/singleton-method/singleton-method.lisp
に置いたので、みてください。
 defmethodの説明は、
http://www.lispworks.com/documentation/HyperSpec/Front/index.htm
Common Lisp HyperSpec

http://www.lispworks.com/documentation/HyperSpec/Body/m_defmet.htm
defmethod
をどうぞ。その説明にあるeql-specializer-formが、Rubyでいう特異メソッド
です。

 先に進む前にちょっと疑問。上記で参照されている
http://blog.livedoor.jp/dankogai/archives/50666398.html
perl - Object::PrototypeでPOMを実装
のドンペンの例は、特異メソッドの例になってるの? 単にメソッドのオーバ
ーライドの例にしかみえないんだけど。

 では、先に進むが、以下、Lispと書いたらCommon Lispのことと思ってくだ
さい。Lispの2大標準のもう一方であるSchemeは、この場合、含まれないので。

 CLOSの場合、他のオブジェクト指向言語と大いに違うのは、メソッドはクラ
スに縛られていないこと。クラスには属していないのだ。
 これが、オプジェクト指向といえば、クラスにメソッドが属するものだと思
い込んでいる人には、驚きだろう。CLOSは、クラスにメソッドが属しているオ
ブジェクト指向の一般化になっているのである。
 昔、電脳騒乱節で、ヒューイット先生のアクターモデルを知ると、
Smalltalk(そしてほとんどのオブジェクト指向言語)の継承は、メッセージを
誰が処理するかを、クラスの先祖をたどる方向に固定したものなのがわかるな
んてことを書いた記憶がある。
 弾さんがいうように、
Too Many Ways to Implement Object Systems
は、その通り。
 だから、あんまり思考に枠をはめずに考えるほうがいい。
 果たしてそんな頭をほぐすのに役立つかどうかわからないが、簡単にCLOSの
モデルを説明してみよう。

 CLOSでは、メソッドはクラスに属していないと書いた。
 だから、Lispでは、クラスがなくてもメソッドは定義できるし、メソッドに
クラスのインスタンスではなく、通常のLispオブジェクトを渡して処理するこ
ともできる。
 逆に、通常の関数でクラスのインスタンスを受け取って処理することもでき
る。
 メソッドの呼び出しと通常の関数の呼び出しは構文上も区別がつかない。
 CLOSは、非常にシームレスに従来のLisp上に作られていることがわかる。
 したがって、

Perl5最大の欠点:Object Systemが後付けなこと。
Perl5最大の利点:Object Systemが後付けなこと。

というのは、Lispも同じ。ただ、それがマクロで作られているところがLispの
すごさ。そして、標準化されているところがPerlとの大きな違い。

 さて、メソッドは、何に属しているかというと、総称関数(generic
function)と呼ばれるものに属している。
 そして、いつ、メソッドがクラスと結びつくかといえば、実行時に動的に結
びつく。
 パラメータとしてメソッドに渡されたオブジェクトをみて、一番ふさわしい
メソッドが呼ばれる。
 当然、パラメータは複数でもよく、それら全部を調べて、最適なメソッドを
選んで実行する。
 1個のパラメータだけで選ぶと、Smalltalk, Java, Rubyなんでもいいけど、
よくあるオブジェクト指向言語の、レシーバになる1つのオブジェクトにメッ
セージを投げるメッセージ伝達型のオブジェクト指向になる。
 つまり、CLOSは、通常のオブジェクト指向言語より一般化されたメカニズム
で動いているわけだ。
 Lisp屋は一般化が好きで、徹底的にやりたがる連中が多いが、それが出た感
じ。数学でいえば、n = 1の場合だけじゃなくて、n = 2, 3や、n が無限大で
どうなるかを考えるような感じ。

 先の弾さんのブログだと、Rubyの特異メソッドが絶賛されているそうだが、
個人的には、Lispの世界で、eql specializerを使った特異メソッドがそんな
にうれしいかといえば、あまりうれしい気がしない。
 何度もいうようだが、CLOSだとメソッドはクラスに縛られていないし、通常
の関数はクラスのインスタンスを受け付けるし、特異メソッドがなければない
で、実務的には通常の関数で処理して大して困らないと思う。
 逆にいえば、Smalltalk, Java, Rubyなど他のオブジェクト指向言語みたい
に、メソッドがクラスに縛られている言語では、特定のインスタンスに作用す
る特異メソッドのような一種の抜け道が必要で、そこがありがたがられるので
はないかと思う。
 でも、Lisp屋にいわせれば、そんなところで苦肉の策を弄さないといけない
言語設計が腐っているというかもね。\(^O^)/
 実際、Common Lispの解説でCLOSの解説の部分でも、eql spepcializerにつ
いては、触れられていないか、軽い扱いだから、そんなに重要視されてないの
ではないか。
 おれは仕事でLispを使ってないし、Lisp屋とはいえないけど、Lisp屋も同じ
思いじゃないか。
 おれなんか、eql specializerがあるなんて、すっかり忘れていた。
 だから、Rubyの特異メソッドが絶賛されていると聞いて、一体、なぜ、絶賛
するんだろうと、かえって考えてしまって、いま、これを書いているわけ。勉
強になったし、初めて、eql-specializerを使った例まで書いちゃって、これ
でおれもいっぱしのLisp屋かな(爆)。
 おれの場合、初めてCLOSを見たとき、「よーやるわ、こいつら」と思ったの
は、メソッドがクラスに縛られないこと、マルチメソッドによるディスパッチ、
メソッド結合によるメソッドの修飾などのアイデアの数々だった。
 たしかに、通常の関数だと、eql specializerの例で示したように、誤って
do-foo-singletonにfoo-normalを渡してもエラーにならないけど、そんなとこ
ろで間違って渡すようだと、プロのプログラマとしてやってけないと思うけど
ね。
 あ、そう。じゃ、お前、クビだね。\(^O^)/

 CLOSは何でもできると思っていたが、個人的にはそんなにありがたい気がし
ないし、滅多に使われないであろうeql specializerによる特異メソッドもあ
ったのには、ちょっと驚いた。
 Lisp屋が、Flavorsなど、CLOSの前身になるようなオブジェクト指向のシス
テムをLisp上に作り始めたが1970年代の後半から1980年代だと思うが、いろい
ろ実験して、CLOSの仕様が定まって、正式にANSI Common Lispに入ったのが、
1994年だったはずだから、今回改めて、CLOSの先進性を感じた次第。
 CLOSがANSI Common Lispに入っているということは、ANSI準拠のCommon
Lisp処理系ならCLOSが使えるということ。だから、Lispではオブジェクト指向
もできる。
 CLOSだけでもフツーは十分だろうが、さらに加えて、CLOSの挙動を自在に再
定義するMOP(Meta Object Protocol, モップと読む)もある。この辺が、いろ
んなことが変幻自在になってないと気がすまないいかにもLisp屋の発想だなと
思う。
 こっちは、まだ公式には標準化されてないけれど、事実上の標準としてAMOP
(A Meta Object Protocol)があって、いまのCLOSの実装は、大体、これに準拠
しているそうだから、かなり互換性はあると思う。
 Common Lispの入門情報やCLOSの入門情報をまとめたものは、別の機会にし
ます。

 余談だが、
http://www.amazon.co.jp/exec/obidos/ASIN/4894714337/showshotcorne-22/ref=nosim
ポールグレアム著, 久野雅樹, 須賀哲夫訳「ANSI Common Lisp」
では、Smalltalk的というかJava的というかRuby的というか、他のオプジェク
ト指向言語的というか、クラスにメソッドが属して、かつ単純継承のオブジェ
クト指向システムの基本部分を、従来のCommon Lisp(つまり、CLOSではない伝
統的な部分だけ)を使って、たったの8行で作っている。
 なぜ、そんなトリックができるのか。それはLispがそれだけのものをすでに
備えていて、8行でやったのは、その外観を加えただけなのだという話。
 この8行でやったことを効率化していくと、85行くらいになっている。
http://www.paulgraham.com/lispcode.html

http://lib.store.yahoo.net/lib/paulgraham/acl2.lisp
ANSI Common Lisp Code
; *** ob ***
の行からが、それ。
 同じ著者で、中級上級者用の
http://www.amazon.co.jp/exec/obidos/ASIN/0130305529/showshotcorne-22/ref=nosim
Paul Graham著「On Lisp」(Prentice Hall)
のほうにも、形を変えてこの話が出てくるが、それは自分で探してください。
 Paul Grahamのウェブサイトでは、電子版を無料で配っている。
http://www.paulgraham.com/onlisp.html
Paul Graham著「On Lisp」(Prentice Hall)
をどうぞ。
 そして、この翻訳版を野田開さんが、高校生のころから翻訳をはじめて、逐
次ウェブ・サイトで配っていたのが、
http://user.ecc.u-tokyo.ac.jp/~t50473/
野田 開のウェブ・サイト
にある。
 何度も書くが、翻訳本が出る出るといわれて、いまだ出ず。どうなっておる
のだ。
 野田さん、高校でLisp知ってたんだもんね。すごいね。
 東大行かずに世界で最初?にCommon Lispの実装を公開したKyoto Common
Lisp(いまのGNU Common Lispの元)の京大数理解析研究所に行けばよかったの
に。\(^O^)/
 あ、高校生からいきなり京大数理解析研究所は入学できないか。\(^O^)/
 一度、Franz社の小俣さんが野田さんを連れてきてくれたときがあって、一
緒に昼飯食いましたが、野田さん、一流物理学者になるのが夢というんだから、
いいよなあ。
 おれなんか物理学者になれないから、いまは、国際宇宙ステーションまで歩
いて上るのが夢だってんだからね。\(^O^)/
 おい、違うだろ、それは。
 あ、そうだった。国際宇宙ステーションまで、自転車で行くのが夢。\(^O^)/

またまた、「あるある」にだまされてる(嗤)2007年01月13日 09時45分40秒

ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
 「あるある」が納豆を朝晩食べるとダイエットになるとやったせいで、各地
で納豆品切れだそうですね。納豆業界はうれしい悲鳴だろうけど、いつまでも
つか。^^;
 以前、「あるある」が納豆を流行らせたときは、大粒納豆がよくて、引き割
り納豆はいまいちという話だったので、引き割り納豆のほうは売れ残っていた
が、今回は、どの納豆も売切れみたいですね。
 納豆コーナーに、
http://www.amazon.co.jp/exec/obidos/ASIN/4861990424/showshotcorne-22/ref=nosim
鷺一雄著「また、「あるある」にダマされた。」(三才ブックス)
を置けば、どうなるんだろうか。\(^O^)/
 ググったら、おれもこれまでいろいろ書いてるね。

http://iiyu.asablo.jp/blog/2006/10/01/544789
また「あるある」にダマされた。その2
http://iiyu.asablo.jp/blog/2006/09/14/523175
鷺一雄著「また、「あるある」にダマされた」
http://iiyu.asablo.jp/blog/2006/08/10/479109
フードファディズム
http://iiyu.asablo.jp/blog/2006/04/08/319426
右脳、左脳は迷信。ドロドロ血、サラサラ血も迷信
http://iiyu.asablo.jp/blog/2005/09/24/86501
悪用される科学とあるある大辞典などの嘘

 アミノ酸ダイエットに踊らされて、アミノ酸飲料を大量に飲み続けて糖尿病
になった話があったが、今回のケース、プリン体が多い納豆ばかり大量に食い
続けて通風になったりしないのか。
 NHKの「ためしてガッテン」
http://www3.nhk.or.jp/gatten/archive/2004q2/20040616.html
では、短期の摂取では大丈夫といってる。長期だと尿酸が増えるといってるけ
ど。大体、こんなテキトーな実験で結論が出せるの? NHKも健康バラエティ
は腐ってるね。
 これに対して以下のような批判もありますね。
http://finalvent.cocolog-nifty.com/fareastblog/2004/07/post_15.html
痛風、ためしてガッテンは間違い?
http://aquarian.cocolog-nifty.com/masaqua/2004/07/__2.html
極東ブログの「 痛風、ためしてガッテンは間違い?」

 ま、寒天ダイエットなどと同じく、この納豆ダイエットもそんなに長続きし
ないから、何の問題もない。\(^O^)/
 だから、大量に納豆食っても短期間だから通風になる奴はいない。(爆)\(^O^)/
 これで八方丸く収まって、めでたしめでたし。
 それでまた、数ヵ月後には、新しいダイエット法と食品が大々的に持ち上げ
られると。
 ほんと、この繰り返しで、そのたびに踊らされる人たちは金と時間を巻き上
げられるんだよね。ときに健康も失うわけだしね。
 まっとうなダイエットに成功する人は、自分を律することができるわけだか
ら、こんなのに引っかからない。結局、ひっかる程度の奴らが何度も引っかか
って食い物にされている構図だろうね。これは、サラ金に軽い気持ちで手を出
して、あっという間に食い物にされて多重債務者に転げ落ちていくのと、よく
似ているね。
 あ、
http://iiyu.asablo.jp/blog/2005/09/24/86501
悪用される科学とあるある大辞典などの嘘
のコメントに、たまさんが、そういうこと書いていたのか。

 飽食の時代で、こんなことをやってるうちに、あと10年くらいで、食糧危
機がはっきりしてきて、日本じゃ、金持ち、それも大金持ち以外は、食い物が
なくなってきて、人造食品(コピー食品)と添加物を食うしかなくなるんじゃな
いか。
 みんな、自然にダイエットできていいかもね。\(^O^)/
 そのころには、「あるある」は、この人造食品や添加物が健康にいい、ダイ
エットになると言い出しているだろうね。食糧危機に対して国民を洗脳したい
政府の意向があるし、スポンサーからお金が入るからね。\(^O^)/
 マチャアキが、「われわれ、人造食品、添加物と聞くと、体に悪いと思いが
ちですが、実は大変素晴らしいものであることが、「あるある」の調査でわか
ったんです」などというんだろうな。朝鮮中央放送か。\(^O^)/
 マチャアキの昔からのファンだから、哀しいよね。
 あ、人造食品、添加物がただちに悪いわけではないですよ。それに、人造食
品(コピー食品)の技術はすごいと思うもん。

http://iiyu.asablo.jp/blog/2006/09/14/523175
鷺一雄著「また、「あるある」にダマされた」
に書いたように、
http://www.amazon.co.jp/exec/obidos/ASIN/4492222669/showshotcorne-22/ref=nosim
安部司著「食品の裏側―みんな大好きな食品添加物」
http://www.amazon.co.jp/exec/obidos/ASIN/4796653015/showshotcorne-22/ref=nosim
別冊宝島「食品のカラクリ―驚異のフードマジックそうだったのかこの食べ物!

は、なるほどねえ、みんなギリギリの勝負やってるなあと感心したもん。
 そうそう、食品のカラクリは、第2弾
http://www.amazon.co.jp/exec/obidos/ASIN/4796654801/showshotcorne-22/ref=nosim
別冊宝島「食品のカラクリ2「肉」のヒミツ」
が出ていて、すごい世界がまだまだあるなあと、思わず感動してしまいました
(苦笑)。
 この中にでてくる、牛乳悪玉説は、アメリカでも流行ってるらしいんですよ
ね。牛乳悪玉説はほんとなのかな。本書では、論争の経緯を載せてあるけど、
牧畜や牛乳業者の団体が猛反発したのも、そりゃ、そうだね。
Google
ブログ(iiyu.asablo.jpの検索)
ホットコーナー内の検索
 でもASAHIネット(asahi-net.or.jp)全体の検索です。
 検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。
 例 中村(show) ki4s-nkmr

ウェブ全体の検索