Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-11-18

MOP-IN-ONE-DAY-2008回想 (1)

| 03:10 | MOP-IN-ONE-DAY-2008回想 (1) - わだばLisperになる を含むブックマーク はてなブックマーク - MOP-IN-ONE-DAY-2008回想 (1) - わだばLisperになる

先週開催されたMOP-IN-ONE-DAY-2008ですが、纏めようにもMOPの部分は自分も全然理解できてないので、もうちょっとAMOP本を読んで理解してからでないと纏められそうにもありません(^^;

ただ、それだと面白くないので、間に挟まれた小話的な黒田さんと受講者との質疑応答を思い出したところから書いて行くことにしてみました。

Q. defclassでスロットの定義が面倒臭くないですか。簡単に書けるマクロを使ったりしないのですか。

質問を解説すると、CLOSのクラスの定義は

(defclass foo ()
  ((foo :initarg :foo :initform () :accessor foo)
   (bar :initarg :bar :initform () :accessor bar)
   (baz :initarg :baz :initform () :accessor baz)
   (zot :initarg :zot :initform () :accessor zot)))

みたいになることが多く、実際に面倒臭いなと自分も感じます。

A. defclassをそのまま手書する人もいるし、マクロを使っている人もいる。

黒田さんは、手書派。Emacsの補完があるのでそんなに面倒ではない、とのことでした。

また略語作るための道具としてのマクロには否定的だそうです。

ちなみに…

ここからは黒田さんの回答とは無関係なのですが、defclassの記述が面倒というのは割と昔からあるようで、Flavaorsのdefflavor風に書けたり、defstruct風に書けたり色々です。

一例として、Metatilitiesのdefclass*を紹介してみます。

(defclass* foo ()
  (x y z)
  :automatic-accessors
  :automatic-initargs
  (:name-prefix))

;=> 
(defclass foo ()
  ((x :initarg :x :accessor foo-x)
   (y :initarg :y :accessor foo-y)
   (z :initarg :z :accessor foo-z)))

(foo-x (make-instance 'foo :x 33))
;=> 33