Last update: 2023-11-22

構造体   Emacs EmacsLisp

構造体の定義

cl-defstruct を使って構造体を定義すると make-[構造体名] というファクトリが使えるようになる。

(cl-defstruct person first-name last-name age sex)
(make-person :first-name "John" :last-name "Doe" :age 30 :sex "male")
#s(person "John" "Doe" 30 "male")

スロットの値の取得

構造体に紐付いた値が格納される場所をスロットという。

構造体の定義時に [構造体名]-[スロット名] という関数も同時に使えるようになっていて、 この関数を使って各スロットの値を取得する。

first-name を取得。

(person-first-name p)
John

age を取得。

(person-age p)
30

構造体判定用の関数 [構造体名]-p も使えるようになる。

(person-p p)
t
(unless (person-p '(John Doe 30 male))
  "Not Person")
Not Person

スロットの値の更新

setf を使ってスロットの値を更新する。

(setf (person-last-name p) "Smith")
p
#s(person "John" "Smith" 30 "male")