(require mzlib/struct) | package: compatibility-lib |
syntax
(copy-struct struct-id struct-expr (accessor-id field-expr) ...)
“Functional update” for structure instances. The result of
evaluating struct-expr must be an instance of the structure
type named by struct-id. The result of the
copy-struct expression is a fresh instance of
struct-id with the same field values as the result of
struct-expr, except that the value for the field accessed by
each accessor-id is replaced by the result of
field-expr.
The result of struct-expr might be an instance of a sub-type of struct-id, but the result of the copy-struct expression is an immediate instance of struct-id. If struct-expr does not produce an instance of struct-id, the exn:fail:contract exception is raised.
If any accessor-id is not bound to an accessor of struct-id (according to the expansion-time information associated with struct-id), or if the same accessor-id is used twice, then a syntax error is raised.
syntax
(define-struct/properties id (field-id ...) ((prop-expr val-expr) ...) maybe-inspector-expr)
maybe-inspector-expr =
| expr
Like define-struct from mzscheme, but
properties can be attached to the structure type. Each
prop-expr should produce a structure-type property value, and
each val-expr produces the corresponding value for the
property.
Examples:
> (define-struct/properties point (x y) ([prop:custom-write (lambda (p port write?) (fprintf port "(~a, ~a)" (point-x p) (point-y p)))])) > (display (make-point 1 2)) (1, 2)
syntax
(make-->vector struct-id)
Builds a function that accepts a structure type instance (matching
struct-id) and provides a vector of the fields of the
structure type instance.