For Development HEAD DRAFTSearch (procedure/syntax/module):

12.91 util.record - SLIB-互換のレコード型

Module: util.record

このモジュールは、Guile と SLIB とに互換性のあるレコード型 API を提供します。 これは、Gauche のオブジェクトシステム上に構築されています。

便利なマクロ define-record-type を提供する gauche.record - レコード型 も 参照してください。

Function: make-record-type type-name field-names

{util.record} あらしいレコード型を表わす新しいクラスを返します。 (これは SLIB では レコード型記述子とよばれているものです。) Gauche では、この新しいクラスは <record> のサブクラスです (gauche.record - レコード型 参照)。

type-name はデバッグの目的で使われる文字列です。 これは、シンボルに変換され、この新しいクラスの名前として設定されます。 field-names はフィールド名のシンボルのリストです。 各々のフィールドはこの新しいクラスのスロットとして実装されます。

以下の手続きでは、rtdmake-record-type によって 生成されたクラスです。

Function: record-constructor rtd :optional field-names

{util.record} 与えられた rtd レコード型のインスタンスを構築する手続きを 返します。返された手続きは field-names とちょうど同じ数の 引数をとります。field-names のデフォルトは '() です。 それぞれの引数は field-names の対応するフィールドの初期値を 設定します。

Function: record-predicate rtd

{util.record} 一つの引数をとり、与えられた引数が rtd と同じ型であり、その場合に 限り #t を返す手続きを返します。

Function: record-accessor rtd field-name

{util.record} rtd 型の field-name によって名付けられたフィールドへの アクセサ手続きを返します。このアクセサ手続きは、rtd のインスタンスを 一つとり、そのフィールドの値を返します。

Function: record-modifier rtd field-name

{util.record} rtd 型の field-name によって名付けられたフィールドへの モディファイア手続きを返します。このモディファイア手続きは、 rtd のインスタンスと値のふたつの引数をとり、その引数を 指定されたフィールドに設定します。

(define rtd (make-record-type "my-record" '(a b c)))

rtd ⇒ #<class my-record>

(define make-my-record (record-constructor rtd '(a b c)))

(define obj (make-my-record 1 2 3))

obj ⇒ #<my-record 0x819d9b0>

((record-predicate? rtd) obj)  ⇒ #t

((record-accessor rtd 'a) obj) ⇒ 1
((record-accessor rtd 'b) obj) ⇒ 2
((record-accessor rtd 'c) obj) ⇒ 3

((record-modifier rtd 'a) obj -1)

((record-accessor rtd 'a) obj) ⇒ -1


For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT