COMMON LISP JP > Archives > 2010/11/18

2010/11/18 13:08:40 UTCPocket
#
また、質問ができたので質問させてください。すいません。
#
defclassで同オブジェクト内のスロットに依存した値をinitform等に設定することって可能でしょうか?
#
Postmodernでデータの二重登録を防止するにあたり:keyというものを設定しなくてはいけないようなのですがデータ的にKeyを一つのスロットに割り当てられないので、別のスロットの値をひとつなぎの文字列にした物をinitformに設定したいのです。
#
つまり、num1というスロットとnum2というスロットの値を指定してインスタンスを生成したらバックグラウンドでkey-slotというスロットにnum1とnum2を文字列に連結した物を割り当てたいのです。
#
説明がへたですいません..
2010/11/18 13:30:45 UTCPocket
#
結局make-instanceの専用wrapperを書き:initargsにそこで割り当ててインスタンス生成する事にして解決しました。
#
ありがとうございました。
2010/11/18 13:40:59 UTCg000001
#
本質的にはmake-instanceのラッパーを書くのと同じなのですが、
#
:afterメソッドを定義できるので、make-instanceのafterメソッドでそういうのを書くというのは定番な気はします
2010/11/18 13:43:06 UTCPocket
#
なるほど!
2010/11/18 13:43:07 UTCg000001
#
と思って探したら逆引きCLでも書いてたことがありました、
#
http://tips.lisp-users.org/common-lisp/index.cgi?%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E4%BD%9C%E6%88%90%E6%99%82%E3%81%AB%E3%81%82%E3%82%8B%E3%82%B9%E3%83%AD%E3%83%83%E3%83%88%E3%81%AE%E5%80%A4%E3%82%92%E5%85%83%E3%81%AB%E4%BB%96%E3%81%AE%E3%82%B9%E3%83%AD%E3%83%83%E3%83%88%E3%81%AE%E5%80%A4%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%97%E3%81%9F%E3%81%84
#
こんなのに違い感じでしょうか?
2010/11/18 13:43:34 UTCPocket
#
正直CLOSを意識した事が無いのでafterとかaroundとかは全くと言っていいほどしらないんです。。
2010/11/18 13:44:06 UTCg000001
#
あ、これはinitialize-instanceにafterを定義しているのですが、
#
make-instanceとどっちが良いのでしょうね。この例は、確かちょっと古めの参考書をみて書いたかもしれません
2010/11/18 13:45:00 UTCPocket
#
まさに求めている動作はこれでした!
#
なるほどスマートにLispの機能で提供されていたんですね。
2010/11/18 13:45:46 UTCNANRI
#
PCLでもinitialize-instanceみたいですよ。Object Reorientation: Classes <http://www.gigamonkeys.com/book/object-reorientation-classes.html>
2010/11/18 13:46:04 UTCg000001
#
お!、そうなんですね
2010/11/18 13:46:09 UTCPocket
#
なるほど。
2010/11/18 13:46:50 UTCg000001
#
どっちにしろinitialize-instanceは呼ばれるのですが、スタイル上の謎でした
#
PCLに書いてたんですねー
2010/11/18 13:47:04 UTCPocket
#
こういう機能の解説とかは最近復刊したbit別冊のCLOS本にのってますかね?
2010/11/18 13:47:23 UTCg000001
#
これは、まさにそれを読んで、メモってたような気はしますw
2010/11/18 13:47:33 UTCPocket
#
なるほど、
2010/11/18 13:47:47 UTCg000001
#
でもあまりスタイル的にどうこうという例はないですね >bit CLOS
#
http://tips.lisp-users.org/common-lisp/index.cgi?%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E7%94%9F%E6%88%90%E3%82%92%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8D%E5%BE%8C%E3%81%A7%E6%9D%A1%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%99%E3%82%82%E3%81%AE%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%97%E3%81%9F%E3%81%84
2010/11/18 13:48:40 UTCPocket
#
日本語のCLOS参考書籍でなにか他に良いものってありますか?
2010/11/18 13:48:55 UTCg000001
#
これとかもbit CLOS本で読んだのを応用して書いたと思います
#
キーンのCLOS本が良いと思うんですけど、絶版なんですね
2010/11/18 13:51:19 UTCPocket
#
なるほど、
2010/11/18 13:51:33 UTCg000001
#
あ、でも実践CLにも大体は載ってましたよねたしか
2010/11/18 13:51:45 UTCPocket
#
ですね。
#
キーンのCLOS本は神奈川県立図書館に蔵書してるみたいなんで、こんど借りてみます。
2010/11/18 13:53:07 UTCg000001
#
CLOS系のオブジェクト指向って他にあまりないので
#
その観点から解説してるのって、それ位な気がするんですね
2010/11/18 13:53:50 UTCPocket
#
なるほど
2010/11/18 13:54:17 UTCg000001
#
今入手できるのって英語版な感じですが、英語読めない自分でもそこそこ読めたので、英語版でも大丈夫ではないでしょうか
#
図書館にあるなら、そっちで良いとは思いますが :)
#
ただ難点はコードの例が処理系依存というか、CLの拡張を前提にした機能の説明だったりして、その辺りは
#
勘案しないといけないかなーというのと、MOPに近いところが、ちょっと古かったりするってところでしょうか。
#
これも仕様がゆれてる時期の本なのでしょうがないといえばしょうがない気はします
2010/11/18 13:56:38 UTCPocket
#
なるほど、ありがとうございます。
#
ところで、Land of Lispってどうですか?どなたかお買いになりました?
2010/11/18 13:57:12 UTCg000001
#
まあ、MOPは今でも仕様に入ってないですが
#
そういえば、買ったけど積読ですねw
#
絵が沢山はいってて解説の漫画が面白いですw
2010/11/18 13:57:56 UTCPocket
#
レベル的にはどんなかんじですか?初歩ぐらいの感じなんですかね?
2010/11/18 13:58:27 UTCg000001
#
そうですね、入門からゲームをつくりながら学ぶって感じで楽しいんじゃないかと思いました
2010/11/18 13:58:44 UTCPocket
#
なるほど、ありがとうございます。
2010/11/18 13:58:44 UTCg000001
#
eqと、equalの使い分けとか漫画で解説されてます
2010/11/18 13:59:01 UTCPocket
#
それは面白そうですねw
2010/11/18 13:59:37 UTCg000001
#
赤ちゃんが3人位いて、eqとeqlとequalって名前なんですが、
#
お父さんが、eqのおしめが濡れてる、っていうんですが、おかあさんが、あなたそれは、eqlよ!とか
#
非常どうでも良い漫画が良い感じですねw
2010/11/18 14:00:34 UTCPocket
#
w
#
そういえば「常にeqlをつかえ派閥」とかいう言葉をどこかで聞いた記憶があるんですが、Lisp関連でしたっけ?
2010/11/18 14:01:10 UTCg000001
#
あ、=もいたかもしれないですね
#
常にeqlを使え派閥は、paul grahamですね
#
実践CLでも、eqは使わないで、eql使えみたいな
2010/11/18 14:02:05 UTCPocket
#
なるほど
2010/11/18 14:02:06 UTCg000001
#
実際eqlで良いんじゃないかなと思いますけれど…
#
ちなみに、land of lispでは、
#
シンボルの比較には、eqを使え!ほかはequalを使えってのが、conradの教えってことで紹介されてます
2010/11/18 14:03:14 UTCPocket
#
なるほど
2010/11/18 14:03:27 UTCg000001
#
まあ、これはこれで良いんじゃないでしょうか。CLより前のlispもそんな感じですし
#
elispもそんな感じですよね
#
昔のlispは、equalで比較するのは、member、remove、delete、eqで比較するのは、memq、remq、delqとかで名前の対応も綺麗だったりしますね
2010/11/18 14:07:17 UTCPocket
#
なるほど
2010/11/18 14:07:43 UTCg000001
#
ちなみに、memqとかCLではなくなってしまったのですが。
2010/11/18 14:16:42 UTCg000001
#
ちなみに、逆引きCL 例を募集してますので、定石ありましたら是非書いてやってください
#
http://tips.lisp-users.org/common-lisp/index.cgi?%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0(CLOS)
#
>みなさま
2010/11/18 20:44:22 UTCshiro
#
今なら基本eqlでいいんじゃないでしょうかね。eqを使うのは、disassembleしてcmp 1命令になってることを確認するような場面だけ。