# define-struct

`(`define-struct` NAME (NAME ...))`
The `define-struct` form is used to define a new kind of structure. The structure's fields are named by the names in parentheses. After evaluation of a define-struct form, a set of new primitives is available for creation, extraction, and type-like queries:

- `make-STRUCTNAME` : takes a number of arguments equal to the number of fields in the structure, and creates a new instance of this structure.
- `STRUCTNAME-FIELDNAME` : takes an instance of the structure and returns the field named by FIELDNAME.
- `set-STRUCTNAME-FIELDNAME!` : updates an instance of the structure and by changing the field named by FIELDNAME.
- `STRUCTNAME?` : takes any value, returns true if the value is an instance of the structure.
- `struct:STRUCTNAME` : represents the structure kind, but it is never used directly.
- `STRUCTNAME` : an identifier representing the structure kind. It can be used with `shared`.

It is an error for any of the created names to be the same as another primitive or another user definition.

Advanced Student Language