Marco Antoniotti <marcoxa@cs.nyu.edu> wrote:
+---------------
| Since we are at it... :)
| What is the translation in Scheme of the Common Lisp
| (defstruct foo
| (a 42 :type integer)
| (b "foo" :type string))
+---------------
As in the other example, it depends on what you restrict yourself to:
1. For either IEEE Scheme [IEEE Std. 1178-1990 (R2002)] or
R5RS Scheme (1998): There is no translation. Standard Schemes
do not include structures.
2. Specific implementation extensions: Many, various, idiosyncratic,
some with typing and some not.
For example, PLT DrScheme/MzScheme provides both simple untyped-slot
structures <URL:http://download.plt-scheme.org/doc/206p1/html/mzscheme/
mzscheme-Z-H-4.html>, for which the translation would be as follows
[not shown is the single-inheritance case, where the first arg is a
two-element list]:
(define-struct foo
(a
b))
and typed-slot structures <URL:http://download.plt-scheme.org/doc/
206p1/html/mzscheme/mzscheme-Z-H-4.html> with some "property" stuff
I really don't understand, but if you define your own accessors you
can associate an optional "guard-proc", which:
...is called by make-struct-type before attaching the property
to a new structure type. ... To reject a property association
(e.g., because the value supplied to make-struct-type is
inappropriate for the property), the guard can raise an exception.
...
Maybe that can be used to enforce slot value typing, I dunno...
-Rob
-----
Rob Warnock <rpw3@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607