Next: Promises, Previous: Cells, Up: Miscellaneous Datatypes
MIT/GNU Scheme provides a record abstraction, which is a simple and
flexible mechanism for building structures with named components.
Records can be defined and accessed using the procedures defined in this
section. A less flexible but more concise way to manipulate records is
to use the define-structure
special form (see Structure Definitions).
Returns a record-type descriptor, a value representing a new data type, disjoint from all others. The type-name argument must be a string, but is only used for debugging purposes (such as the printed representation of a record of the new type). The field-names argument is a list of symbols naming the fields of a record of the new type. It is an error if the list contains any duplicates. It is unspecified how record-type descriptors are represented.
Returns a procedure for constructing new members of the type represented by record-type. The returned procedure accepts exactly as many arguments as there are symbols in the given list, field-names; these are used, in order, as the initial values of those fields in a new record, which is returned by the constructor procedure. The values of any fields not named in the list of field-names are unspecified. The field-names argument defaults to the list of field-names in the call to
make-record-type
that created the type represented by record-type; if the field-names argument is provided, it is an error if it contains any duplicates or any symbols not in the default list.
Returns a procedure for constructing new members of the type represented by record-type. The returned procedure accepts arguments in a keyword list, which is an alternating sequence of names and values. In other words, the number of arguments must be a multiple of two, and every other argument, starting with the first argument, must be a symbol that is one of the field names for record-type.
The returned procedure may be called with a keyword list that contains multiple instances of the same keyword. In this case, the leftmost instance is used and the other instances are ignored. This allows keyword lists to be accumulated using
cons
orcons*
, and new bindings added to the front of the list override old bindings at the end.
Returns a procedure for testing membership in the type represented by record-type. The returned procedure accepts exactly one argument and returns
#t
if the argument is a member of the indicated record type; it returns#f
otherwise.
Returns a procedure for reading the value of a particular field of a member of the type represented by record-type. The returned procedure accepts exactly one argument which must be a record of the appropriate type; it returns the current value of the field named by the symbol field-name in that record. The symbol field-name must be a member of the list of field names in the call to
make-record-type
that created the type represented by record-type.
Returns a procedure for writing the value of a particular field of a member of the type represented by record-type. The returned procedure accepts exactly two arguments: first, a record of the appropriate type, and second, an arbitrary Scheme value; it modifies the field named by the symbol field-name in that record to contain the given value. The returned value of the modifier procedure is unspecified. The symbol field-name must be a member of the list of field names in the call to
make-record-type
that created the type represented by record-type.
Returns
#t
if object is a record of any type and#f
otherwise. Note thatrecord?
may be true of any Scheme value; of course, if it returns#t
for some particular value, thenrecord-type-descriptor
is applicable to that value and returns an appropriate descriptor.
Returns the record-type descriptor representing the type of record. That is, for example, if the returned descriptor were passed to
record-predicate
, the resulting predicate would return#t
when passed record. Note that it is not necessarily the case that the returned descriptor is the one that was passed torecord-constructor
in the call that created the constructor procedure that created record.
Returns
#t
if object is a record-type descriptor; otherwise returns#f
.
Returns the type name associated with the type represented by record-type. The returned value is
eqv?
to the type-name argument given in the call tomake-record-type
that created the type represented by record-type.
Returns a list of the symbols naming the fields in members of the type represented by record-type. The returned value is
equal?
to the field-names argument given in the call tomake-record-type
that created the type represented by record-type.1