Lispチュートリアル
2日間みっちり!Lispチュートリアル & 事例紹介セミナーの1日目参加した
MOP (Metaobject Protocol) in One Day
Gregor Kiczales 著 The Art of the Metaobject Protocol(略してAMOPというらしい)をベースとしてMOPについて理解することを目的としたセミナー。ならばとAMOP買って読んでみたが、いまいちよくわからない。やや後悔。
そもそもMOPってなに?
Metaobject Protocolなんて言われてもさっぱりわからない。Metaobjectって言われるとOOPっぽいし、Protocolって言われるとネットワークプロトコルみたいなものを考えてします。だいたいLipsにはCLOSっていうOOの仕組みがあるのに、これとは別にMOPが必要な意味がわからない。セミナーでわかるといいが、受講者のレベルが高そうだから、そんなもんはすっ飛ばして説明が始まるかもしれない。
セミナー当日
セミナーでは、講師の黒田さんからAMOPの概要について説明を受ける。黒田さんによるとAMOPは第一章が理解できれば、以降は自力で読み進めることができるそうだ。(もちろん読み進めるスピードには個人差があるけどね)これは勇気づけられる。セミナーでは、第三章までの内容を黒田さんが説明する形式。ただし、説明はAMOPで紹介されているコード(CLOSETTE)をそのまま説明するのではなく、黒田さんがいくつか書き直したものを使用していた。
MOPを理解する意味
で、結局MOPって?
自分の理解では、オブジェクト指向プログラミング(例えば、CLOS)を実現するための道具立てを標準化したもの。yet anotherなCLOSという位置づけじゃない。MOPを使えれば、CLOSの挙動をMOPで定義されているクラスを拡張したり、メソッドを書き換えたり、(arroundメソッドを書いたり)して変えることができる。でもMOPはANSI common lispの標準ではないらしい。勿体ない。
質問
Q1:メソッドの引数の順序ではまることはありますか?
A1:あまりない。継承するクラスをどっちを先にするかではまることはある。mix-inクラスを優先させること多いが決まっているわけでもない。
Q2:defclassを書くのって面倒くさい、黒田さんは全部書いていますか?
A2:emacsの機能で楽してるけど、全部書いている。
Q2:マクロは使わないのですか?
A2:マクロを入力量を減らすために使うのは勧めない。Editorでがんばるべき。マクロは新しい語彙を入れ込むためのもの。安易に使うべきでない。自然言語の世界でも自分勝手な言葉を話すやつとはつき合いたくない。
Q3:CLOSのよいスタイルとは?
A3:Tutorial on Good Lisp Programming Styleがよい。postscriptのスライド。Guy styleの本(COMMON LISP第2版)をよく参考にしている。他には、語彙を正しく使うこと(ifを書いたらelseを必ず書くとか)、nil, (), 'nil, '()の使い分け