1 Language Model
2 Syntactic Forms
3 Datatypes
4 Structures
5 Classes and Objects
6 Units
7 Contracts
8 Pattern Matching
9 Control Flow
10 Concurrency
11 Macros
12 Input and Output
13 Reflection and Security
14 Operating System
15 Memory Management
16 Running PLT Scheme
Bibliography
Index
On this page:
struct->vector
struct?
struct-type?
struct-constructor-procedure?
struct-predicate-procedure?
struct-accessor-procedure?
struct-mutator-procedure?
prefab-struct-key
make-prefab-struct
prefab-key->struct-type
Version: 4.0.2

 

4.5 Structure Utilities

(struct->vector v [opaque-v])  vector?

  v : any/c

  opaque-v : any/c = '...

Creates a vector representing v. The first slot of the result vector contains a symbol whose printed name has the form struct:id. Each remaining slot contains either the value of a field in v, if it is accessible via the current inspector, or opaque-v for a field that is not accessible. A single opaque-v value is used in the vector for contiguous inaccessible fields. (Consequently, the size of the vector does not match the size of the struct if more than one field is inaccessible.)

(struct? v)  any

  v : any/c

Returns #t if struct->vector exposes any fields of v with the current inspector, #f otherwise.

(struct-type? v)  boolean?

  v : any/c

Returns #t if v is a structure type descriptor value, #f otherwise.

(struct-constructor-procedure? v)  boolean?

  v : any/c

Returns #t if v is a constructor procedure generated by define-struct or make-struct-type, #f otherwise.

(struct-predicate-procedure? v)  boolean?

  v : any/c

Returns #t if v is a predicate procedure generated by define-struct or make-struct-type, #f otherwise.

(struct-accessor-procedure? v)  boolean?

  v : any/c

Returns #t if v is an accessor procedure generated by define-struct, make-struct-type, or make-struct-field-accessor, #f otherwise.

(struct-mutator-procedure? v)  boolean?

  v : any/c

Returns #t if v is a mutator procedure generated by define-struct, make-struct-type, or make-struct-field-mutator, #f otherwise.

(prefab-struct-key v)  (or/c false/c symbol? list?)

  v : any/c

Returns #f if v is not an instance of a prefab structure type. Otherwise, the result is the shorted key that could be with make-prefab-struct to create an instance of the structure type.

Examples:

  > (prefab-struct-key #s(cat "Garfield"))

  cat

  > (define-struct cat (name) #:prefab)

  > (define-struct (cute-cat cat) (shipping-dest) #:prefab)

  > (make-cute-cat "Nermel" "Abu Dhabi")

  #s((cute-cat cat 1) "Nermel" "Abu Dhabi")

(make-prefab-struct key v ...)  struct?

  key : (or/c symbol? list?)

  v : any/c

Creates an instance of a prefab structure type, using the vs as field values. The key and the number of vs determine the prefab structure type.

A key identifies a structure type based on a list with the following items:

An empty vector and an auto-field list that starts with 0 can be omitted. Furthermore, the first integer (which indicates the number of non-automatic fields) can be omitted, since it can be inferred from the number of supplied vs. Finally, a single symbol can be used instead of a list that contains only a symbol (in the case that the structure type has no supertype, no automatic fields, and no mutable fields).

The total field count must be no more than 32768. If the number of fields indicated by key is inconsistent with the number of supplied vs, the exn:fail:contract exception is raised.

Examples:

  > (make-prefab-struct 'clown "Binky" "pie")

  #s(clown "Binky" "pie")

  > (make-prefab-struct '(clown 2) "Binky" "pie")

  #s(clown "Binky" "pie")

  > (make-prefab-struct '(clown 2 (0 #f) #()) "Binky" "pie")

  #s(clown "Binky" "pie")

  > (make-prefab-struct '(clown 1 (1 #f) #()) "Binky" "pie")

  #s((clown (1 #f)) "Binky" "pie")

  > (make-prefab-struct '(clown 1 (1 #f) #(0)) "Binky" "pie")

  #s((clown (1 #f) #(0)) "Binky" "pie")

(prefab-key->struct-type key field-count)  struct-type?

  key : (or/c symbol? list?)

  field-count : (integer-in 0 32768)

Returns a structure type descriptor for the prefab structure type specified by the combination of key and field-count.