You are looking at historical revision 28171 of this page. It may differ significantly from its current revision.

This page is maintained in the package's github repository.


This is a Chicken Scheme egg which implements a QobiScheme-compatible define-structure macro. The resulting object is implemented as a chicken record. It automatically sets up reader syntax for reading and writing the object. It also integrates with the nondeterminism egg, see local-set-{name}-{field}!.


[syntax] (define-structure name . fields)

Creates a new structure.


The following functions are generated when creating a structure.

[procedure] (make-{name} {field0-value} {field1-value} ...)
[procedure] (make-keywords-{name} {field-name}: {field-value} ...)

Any fields not defined in make-keywords-{name} will be uninitialized.

[procedure] ({name}? obj)

Tests if obj is of a {name} record.

[procedure] ({name}-{field} obj)

Accesses the field.

[procedure] ({name}-{field}-set! obj val)
[procedure] (set-{name}-{field}! obj val)

The former is created by chicken's define-record, the latter is added for compatbility with QobiScheme.

[procedure] ({name}-{field}-setp! obj proc)
[procedure] (setp-{name}-{field}! obj proc)

Like set- but calls proc witht he current value and updates it to what proc returns.

[procedure] (local-set-{name}-{field}! obj val)
[procedure] (local-setp-{name}-{field}! obj proc)

This set! will be undone when backtracking with the nondeterminism egg.

[procedure] ({name}-{field}-update obj val)
[procedure] (update-{name}-{field} obj val)
[procedure] ({name}-{field}-updatep obj proc)
[procedure] (updatep-{name}-{field} obj proc)

like the set and setp versions but these return a new copy of the object.

[procedure] (set-{name}! obj {field-key}: {field-value} ...)
[procedure] (setp-{name}! obj {field-key}: {field-value} ...)
[procedure] (update-{name} obj {field-key}: {field-value} ...)
[procedure] (updatep-{name} obj {field-key}: {field-value} ...)

As above but with keywords.

[procedure] (alist->{name} alist)
[procedure] ({name}->alist obj)

Convert to and back from an alist.

[procedure] (old-vector->{name} vector)

Reads in a vector of the form #({case-insensitive-name} {field0} ...). This is only provided for compatibility with Scheme->C. Not yet implemented.


  Copyright (c) 2013, Andrei Barbu, Purdue University
  All rights reserved.
  Contact Andrei Barbu at
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU Lesser General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  GNU Lesser General Public License for more details.
  You should have received a copy of the GNU Lesser General Public License
  along with this program.  If not, see