インスタンス変数へアクセスするメソッドを簡単に定義する - lisp-cookbook-ja/common-lisp GitHub Wiki
インスタンス変数へアクセスするメソッドを簡単に定義する
defclass でのクラスの定義では :reader(読み出し専用)、 :writer(書き込み専用)、 accessor(読み書き)を指定することにより総称関数(メソッド)も一緒に定義できます。
(defclass sample-class ()
((a :initform 0 :reader a) ;aというリーダを設定
(b :initform 0 :writer b) ;bというライタを設定
(c :initform 0 :accessor c))) ;cというアクセサを設定
(let ((inst (make-instance 'sample-class)))
(b 10 inst) ;bメソッドでbスロットに10を設定
(setf (c inst) 100) ;cメソッドでcスロットに100を設定
(describe inst))
;-> Instance: #<SAMPLE-CLASS {4002406CD2}>
; Class: #<STANDARD-CLASS SAMPLE-CLASS {40036857E2}>
; The following slots have :instance allocation:
; A 0
; B 10
; C 100