1 mzlib/ a-signature
2 mzlib/ a-unit
3 mzlib/ async-channel
4 mzlib/ awk
5 mzlib/ class
6 mzlib/ class100
7 mzlib/ cm
8 mzlib/ cm-accomplice
9 mzlib/ cmdline
10 mzlib/ cml
11 mzlib/ compat
12 mzlib/ compile
13 mzlib/ contract
14 mzlib/ control
15 mzlib/ date
16 mzlib/ deflate
17 mzlib/ defmacro
18 mzlib/ etc
19 mzlib/ file
20 mzlib/ for
21 mzlib/ foreign
22 mzlib/ include
23 mzlib/ inflate
24 mzlib/ integer-set
25 mzlib/ kw
26 mzlib/ list
27 mzlib/ match
28 mzlib/ math
29 mzlib/ md5
30 mzlib/ os
31 mzlib/ pconvert
32 mzlib/ pconvert-prop
33 mzlib/ plt-match
34 mzlib/ port
35 mzlib/ pregexp
36 mzlib/ pretty
37 mzlib/ process
38 mzlib/ restart
39 mzlib/ runtime-path
40 mzlib/ sandbox
41 mzlib/ sendevent
42 mzlib/ serialize
43 mzlib/ shared
44 mzlib/ string
45 mzlib/ struct
46 mzlib/ stxparam
47 mzlib/ surrogate
48 mzlib/ tar
49 mzlib/ thread
50 mzlib/ trace
51 mzlib/ traceld
52 mzlib/ trait
53 mzlib/ transcr
54 mzlib/ unit
55 mzlib/ unit-exptime
56 mzlib/ unit200
57 mzlib/ unitsig200
58 mzlib/ zip
Bibliography
Index
On this page:
copy-struct
define-struct/ properties
make->vector
Version: 4.0.2

 

 (require mzlib/struct)

(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.

(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)

(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.