(defstruct 《ストラクチャ名》《フィールド》
《フィールド
》) 【マクロ】
《フィールド》
《フィールド
》 のフィールドからなる 《ストラクチャ名》 というストラクチャを宣言し,
を定義する. 型述語は1引数の関数で
という名前で定義される.引数がストラクチャのデータであれば #tを返し,それ以外のデータの場合は #fを返す. アクセス関数は各フィールドごとに《ストラクチャ名》?
《ストラクチャ名》-《フィールド》という名前で定義される. アクセス関数はストラクチャ・データを引数として受け取り,対応するフィー ルドの値を返す. コンストラクタは
make-《ストラクチャ名》という名前で定義され,
(make-《ストラクチャ名》という形で呼び出す. `` :《フィールド》 〈値〉 ''を指定すると 《フィールド》 の初期値を 〈値〉 として ストラクチャのデータを作る. 指定しなかったときのフィールドの値は ()となる. ()以外の標準値を設けたいときは, defstructの 《フィールド》 のところを
[:《フィールド》 〈値〉]
![]()
[:《フィールド》 〈値〉] )
(《フィールド》 《式》 )とすればよい. 《式》 はコンストラクタが呼ばれるごとに評価される.
例:
> (define *student-id* 0)
*student-id*
> (defstruct student
department
grade
name
(sex 'male)
(id (set! *student-id* (1+ *student-id*))))
student
> (define x (make-student
:department 'computer-science
:grade 3
:name 'yuasa))
x
> x
#s(student computer-science 3 yuasa male 1)
> (student? x)
#t
> (student-department x)
computer-science
> (student-name x)
yuasa
> (define y (make-student
:department 'ics
:grade 2
:name 'foo))
y
> y
#s(student ics 2 foo male 2)
> (student-id y)
2