Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.

  1. Outdated egg!
    1. Creation
    2. Use
    3. License

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

= define-structure

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}!.

Creation

[syntax] (define-structure name . fields)
[syntax] (define-public-structure name . fields)
[syntax] (define-private-structure name . fields)

Creates a new structure. By default all structures are public, generate an export form, making define-structure an alias for define-public-structure.

Use

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.

License

  Copyright (c) 2013, Andrei Barbu, Purdue University
  All rights reserved.
  Contact Andrei Barbu at andrei@0xab.com.
  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
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  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 http://www.gnu.org/licenses.