▼ |  | Mz Lib: Legacy Libraries

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

top ← prev up next →

(require mzlib/struct)

> > 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.
top ← prev up next →