[[tags: egg lang-exts]]
[[toc:]]
This page is maintained in the package's
[[https://github.com/abarbu/define-structure|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
(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.