Shammer's Philosophy

My private adversaria

Lispの構造体

Lispでも構造体が使える。以下のような実装になる。

> (defstruct test x y)
TEST
> (setf x (make-test :x 0 :y 0))
#S(TEST :X 0 :Y 0)
> (test-x x)
0
> (test-y x)
0

構造体を作成すると、勝手に「make-構造体名」という関数が定義され、それを利用して構造体のオブジェクトを作成できる。
そして、「構造体名-要素名(?)」で、その構造体の個々の要素の値へアクセスできる。
要素の値を変更するには、以下のようにすればできる。

> (setf (test-x x) 5)
5
> x
#S(TEST :X 5 :Y 0)
> (setf (test-y x) 10)
10
> x
#S(TEST :X 5 :Y 10)