R6RS:翻訳:Standard Libraries:6.4 Inspection

R6RS:翻訳:Standard Libraries:6.4 Inspection

6.4 調査

(rnrs records inspection (6)) ライブラリでは構造体と構造体型記述子を調査する手続きを提供する。これらの手続きは可搬性のある表示器や調査器を作ることができるように設計されている。

一方では、 record? や record-rtd は構造体が構造体でないかのように不透明な構造体型として扱い、また一方ではレコード型記述子そのものを操作する調査手続きでは不透明性の影響を受けない。つまり、不透明性によりプログラムが構造体から rtd を取得できるかどうかを制御しているのである。ブログラムが、 make-record-type-descriptor や record-type-descriptor からもとの rtd にアクセスできる場合、依然として調査手続きを使うことができる。

[procedure] (record? obj)

obj が構造体で、不透明でない場合 #t を返し、それ以外の場合には #f を返す。

[procedure] (record-rtd record)

型が不透明でない場合、 record の型を表す rtd を返す。このとき、最も正確な型の rtd 、すなわち、 t 型の構造体で、 t を拡張していないような t が返る。型が不透明である場合、コンディション型 &assertion 型の例外が発生する。

[procedure] (record-type-name rtd)

構造体記述子 rtd の名前を返す。

[procedure] (record-type-parent rtd)

構造体記述子 rtd の親を返す。もしなければ #f を返す。

[procedure] (record-type-uid rtd)

構造体記述子 rtd の uid を返す。ない場合には #f を返す(実装系は生成的な構造体に自動生成された uid を構造体型に割り当ててもかまわない。そのため、 uid が返るからといって構造体が必ずしも非生成的であるというわけではない)。

[procedure] (record-type-generative? rtd)

rtd が生成的であれば #t を返し、さもなくは #f を返す。

[procedure] (record-type-sealed? rtd)

構造体型記述子がが凍結されていれば #t を返し、さもなくは #f を返す。

[procedure] (record-type-opaque? rtd)

構造体型記述子がが不透明であれば #t を返し、さもなくは #f を返す。

[procedure] (record-type-field-names rtd)

rtd で表される型のフィールドの名前のベクタを返す(親型のフィールドのものは含まない)。フィールドは make-record-type-descriptor で指定した順序になる。戻り値のベクタは変更不能であることがある。戻り値のベクタを変更した場合の rtd への影響は規定されていない。

[procedure] (record-field-mutable? rtd k)

rtd で表される型の、 k で指し示されるフィールドが変更可能であれば #t を返し、そうでなければ #f を返す。 k の意味は record-accessor の場合と同じである。


Last modified : 2008/08/04 14:03:02 UTC