next up previous contents index
: ストラクチャの変更 : ストラクチャ : ストラクチャ   目次   索引

ストラクチャの宣言と生成と参照

(defstruct 《ストラクチャ名》《フィールド$_1$$\cdots$《フィールド$_n$》) 【マクロ】

《フィールド$_1$$\sim$ 《フィールド$_n$》 のフィールドからなる 《ストラクチャ名》 というストラクチャを宣言し,
を定義する. 型述語は1引数の関数で
《ストラクチャ名》?
という名前で定義される.引数がストラクチャのデータであれば #tを返し,それ以外のデータの場合は #fを返す. アクセス関数は各フィールドごとに
《ストラクチャ名》-《フィールド》
という名前で定義される. アクセス関数はストラクチャ・データを引数として受け取り,対応するフィー ルドの値を返す. コンストラクタは
make-《ストラクチャ名》
という名前で定義され,

(make-《ストラクチャ名》   

[:《フィールド$_1$》 〈値〉]
$\cdots$
[:《フィールド$_n$》 〈値〉] )
という形で呼び出す. `` :《フィールド》 〈値〉 ''を指定すると 《フィールド》 の初期値を 〈値〉 として ストラクチャのデータを作る. 指定しなかったときのフィールドの値は ()となる. ()以外の標準値を設けたいときは, 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


next up previous contents index
: ストラクチャの変更 : ストラクチャ : ストラクチャ   目次   索引
Tsuneyasu KOMIYA 平成14年2月22日