Structures and Records
Bigloo supports two kinds of enumerated types: the structures and the records. They offer similar facilities. Structures were pre-existing to records and they are maintained mainly for backward compatiblity. Recors are compliant with the Scheme request for implementation 9.Structures
There is, in Bigloo, a new class of objects: structures, which are equivalent to Cstruct.
define-struct name field...bigloo syntax
This form defines a structure with name name, which is a symbol, having fields field... which are symbols or lists, each list being composed of a symbol and a default value. This form creates several functions: creator, predicate, accessor and assigner functions. The name of each function is built in the following way:- Creator: make-name
- Predicate: name?
- Accessor: name-field
- Assigner: name-field-set!
make-name accepts optional arguments. If a
single argument is provided, all the slots of the created structures
are filled with it. If more than one argument is passed, the various
values are used to initialize the corresponding structure slots. The
creator named name accepts as many arguments as the number of
slots of the structure. This function allocates a structure and fills
each of its slots with its corresponding argument.
If a structure is created using make-name and no initialization
value is provided, the slot default values (when provided) are used
to initialize the new structure. For instance, the execution of the program:
(define-struct pt1 a b) (define-struct pt2 (h 4) (g 6)) (make-pt1) ⇒ #{PT1 () ()} (make-pt1 5) ⇒ #{PT1 5 5} (make-pt2) ⇒ #{PT2 4 6} (make-pt2 5) ⇒ #{PT2 5 5}
.keep
struct? objbigloo procedure
Returns#t if and only if obj is a structure.
.keep
 
Records (SRFI-9)
Bigloo supports records has specified by SRFI-9. This section is a copy of the SRFI-9 specification by Richard Kelsey. This SRFI describes syntax for creating new data types, called record types. A predicate, constructor, and field accessors and modifiers are defined for each record type. Each new record type is distinct from all existing types, including other record types and Scheme's predefined types.define-record-type expression...syntax
The syntax of a record-type definition is:<record-type-definition> ⇒ (define-record-type <type-name>
                                         (<constructor-name> <field-tag> ...)
                                         <predicate-name>
                                         <field-spec> ...)
<field-spec>             ⇒ (<field-tag> <accessor-name>)
                           | (<field-tag> <accessor-name> <modifier-name>)
<field-tag>              ⇒ <identifier>
<accessor-name>          ⇒ <identifier>
<predicate-name>         ⇒ <identifier>
<modifier-name>          ⇒ <identifier>
<type-name>              ⇒ <identifier>
Define-record-type is generative: each use creates a new record
type that is distinct from all existing types, including other record
types and Scheme's predefined types. Record-type definitions may only
occur at top-level (there are two possible semantics for `internal'
record-type definitions, generative and nongenerative, and no consensus
as to which is better).
an instance of define-record-type is equivalent to the following
definitions:
- <type-name>is bound to a representation of the record type itself. Operations on
record types, such as defining print methods, reflection, etc. are left
to other SRFIs.
- <constructor-name>is bound to a procedure that takes as many arguments as the
re are
- <predicate-name>is a predicate that returns
- Each <accessor-name>is a procedure that takes a record of type
- Each <modifier-name>is a procedure that takes a record of type
<field-tag>s in the (<constructor-name> ...) subform 
and returns a new <type-name> record. Fields whose tags are listed 
with <constructor-name> have the corresponding argument as their 
initial value. The initial values of all other fields are unspecified. 
#t when given a value returned by
<constructor-name> and #f for everything else.
<type-name> and returns the current value of the corresponding 
field. It is an error to pass an accessor a value which is not a record 
of the appropriate type. 
<type-name> and a value which becomes the new value of the 
corresponding field; an unspecified value is returned. It is an error 
to pass a modifier a first argument which is not a record of the appropriate 
type. 
(define-record-type pare (kons x y) pare? (x kar set-kar!) (y kdr))defines
kons to be a constructor, kar and kdr to be 
accessors, set-kar! to be a modifier, and pare? to be a 
predicate for pares. 
(pare? (kons 1 2)) ⇒ #t (pare? (cons 1 2)) ⇒ #f (kar (kons 1 2)) ⇒ 1 (kdr (kons 1 2)) ⇒ 2 (let ((k (kons 1 2))) (set-kar! k 3) (kar k)) ⇒ 3
.keep