by shigemk2

当面は技術的なことしか書かない

構造体

Common Lispなので、
setqじゃだめですね。

  1. 構造体を定義する
  2. 構造体のインスタンスを作成する
  3. 構造体のメンバにアクセスする
(defstruct person name age (sex 'unknown)) ; sexのデフォはunknown
(setq tom (make-person :name "Tom" :age 10 :sex 'male)) ; => [cl-struct-person "Tom" 10 male]
(make-person :name "Bill")				; => [cl-struct-person "Bill" nil unknown]
;; クローン人間
(copy-person tom)			; => [cl-struct-person "Tom" 10 male]
;; Tomは人間
(person-p tom)				; => t
(person-p 'not-person)			; => nil

;; メンバを読み取る
(person-name tom)			; => "Tom"
(person-age tom)			; => 10
(person-sex tom)			; => male
;; メンバ更新
(setf (person-age tom) 12)		; => 12
tom					; => [cl-struct-person "Tom" 12 male]
(ignore-errors(setq (person-age tom) 12)) ; => nil
(incf (person-age tom))			  ; => 13
tom					  ; => [cl-struct-person "Tom" 13 male]

P202

Emacs Lispテクニックバイブル

Emacs Lispテクニックバイブル