S9 LIB  (define-record <type-name> (<slot-name> <value>) ...)  ==>  unspecific

DEFINE-RECORD creates a new type, which is a sub-type of the vector,
and defines a set of procedures for creating objects of the new type,
accessing its slots, and checking for its type.

<Type-name> is the name of the new type. Each (<slot-name> <value>) pair
defines a slot of the new type, where <slot-name> is a symbol naming the
slot and <value> is a default value for this slot.

(define-record <type> (<s1> <v1>) ... (<sN> <vN>)) will expand to
definitions of the following procedures:

(<type>? x) is a predicate checking whether X has the type <type>.

(make-<type>) creates a new object of the type <type> and initializes
its slots with the values specified in DEFINE-RECORD.

(<type>-<s1> x) evaluates to the value stored in slot <s1> of X. When
X is not of the type <type>, an error will be signalled.
(<type>-<sN> x) does the same, but accesses slot <sN>.

(<type>-set-<s1>! x v) changes the value stored in slot <s1> of X to V.
When X is not of the type <type>, an error will be signalled.
(<type>-set-<sN>! x v) does the same, but changes slot <sN>.

(begin
  (define-record point (x 0) (y 0) (color #f))
  (let ((p (make-point)))
    (point-set-color! p 'yellow)
    (list (point? p)
          (point-color p))))               ==>  (#t yellow)
