[R6RS] relationships between uid, <record name>, and rtd
Michael Sperber
sperber at informatik.uni-tuebingen.de
Thu Mar 9 13:30:01 EST 2006
William D Clinger <will at ccs.neu.edu> writes:
> My question is whether the following kind of implementation
> would meet the requirements of SRFI 76.
>
> (define-record-type
> (foo make-foo foo?)
> (fields (immutable x get-x)))
>
> macro expands (assuming a form of letrec* semantics for
> definitions) into
>
> (begin
> (define foo
> (make-record-type-descriptor 'foo #f #f #f #f '(immutable x)))
> (define make-foo
> (lambda (x) ((record-constructor foo) x)))
> (define get-x
> (lambda (rec) ((record-accessor foo 0) rec))))
Well, for just this record type, except for the different usage of
`record-constructor', yes. (It would get more complicated as you
define subtypes, but I believe it could be done.)
> Are programs forbidden to assign to the record name bound
> by define-record-type ?
Yes, because (as currently described) `foo' may be syntax binding.
> If programs are forbidden to assign to the record name,
> then must/should/may such assignments raise an exception?
No, because (as currently described) `foo' may be a regular value
binding.
> If programs are not forbidden to assign to the record name,
> then does/may such an assignment have any effect out of the
> ordinary?
>
> In particular, does/may it affect the behavior of a use
> of define-record-type that occurs within the scope of the
> record name, uses foo as its parent, and is evaluated
> after the assignment?
Yes.
--
Cheers =8-} Mike
Friede, Völkerverständigung und überhaupt blabla
More information about the R6RS
mailing list