= 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) Creates a new 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. __NOTOC__