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.
TOC »
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
- (define-structure name . fields)syntax
- (define-public-structure name . fields)syntax
- (define-private-structure name . fields)syntax
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} ...)procedure
- (make-keywords-{name} {field-name}: {field-value} ...)procedure
Any fields not defined in make-keywords-{name} will be uninitialized.
-
? objprocedure Tests if obj is of a {name} record.
- ({name}-{field} obj)procedure
Accesses the field.
- ({name}-{field}-set! obj val)procedure
- (set-{name}-{field}! obj val)procedure
The former is created by chicken's define-record, the latter is added for compatbility with QobiScheme.
- ({name}-{field}-setp! obj proc)procedure
- (setp-{name}-{field}! obj proc)procedure
Like set- but calls proc witht he current value and updates it to what proc returns.
- (local-set-{name}-{field}! obj val)procedure
- (local-setp-{name}-{field}! obj proc)procedure
This set! will be undone when backtracking with the nondeterminism egg.
- ({name}-{field}-update obj val)procedure
- (update-{name}-{field} obj val)procedure
- ({name}-{field}-updatep obj proc)procedure
- (updatep-{name}-{field} obj proc)procedure
like the set and setp versions but these return a new copy of the object.
- (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} ...)procedure
As above but with keywords.
- (alist->{name} alist)procedure
-
->alist objprocedure Convert to and back from an alist.
- (old-vector->{name} vector)procedure
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.