Chicken egg with a QobiScheme-compatible define-structure macro
Scheme
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
README.chickenwiki
README.mediawiki
define-structure.meta
define-structure.release-info
define-structure.scm
define-structure.setup

README.mediawiki

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

(define-structure name . fields)
(define-public-structure name . fields)
(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.

(make-{name} {field0-value} {field1-value} ...)
(make-keywords-{name} {field-name}: {field-value} ...)
Any fields not defined in make-keywords-{name} will be uninitialized.

({name}? obj)
Tests if obj is of a {name} record.

({name}-{field} obj)
Accesses the field.

({name}-{field}-set! obj val)
(set-{name}-{field}! obj val)
The former is created by chicken's define-record, the latter is added for compatbility with QobiScheme.

({name}-{field}-setp! obj proc)
(setp-{name}-{field}! obj proc)
Like set- but calls proc witht he current value and updates it to what proc returns.

(local-set-{name}-{field}! obj val)
(local-setp-{name}-{field}! obj proc)
This set! will be undone when backtracking with the nondeterminism egg.

({name}-{field}-update obj val)
(update-{name}-{field} obj val)
({name}-{field}-updatep obj proc)
(updatep-{name}-{field} obj proc)
like the set and setp versions but these return a new copy of the object.

(set-{name}! obj {field-key}: {field-value} ...)
(setp-{name}! obj {field-key}: {field-value} ...)
(update-{name} obj {field-key}: {field-value} ...)
(updatep-{name} obj {field-key}: {field-value} ...)
As above but with keywords.

(alist->{name} alist)
({name}->alist obj)
Convert to and back from an alist.

(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.