[[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) 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.