1 (define-syntax define-record
4 ((_ name field0 field1 ...)
8 ((fname) (syntax (field fname #f)))
9 ((fname default) (syntax (field fname default)))
10 (fname (syntax (field fname #f)))))
11 (syntax (field0 field1 ...)))))
16 (define-syntax define-record*
18 (letrec ((make-name (lambda args
28 (syntax-case e (field)
29 ((_ name ((field field-name default) ...))
30 #`(begin (define* (#,(make-name "make-" (syntax name))
31 #:optional (field-name default) ...)
32 (vector 'name field-name ...))
36 #`(begin (define (#,(make-name (syntax name)
40 (vector-ref rec #,idx))
41 (define (#,(make-name "set-"
46 (vector-set! rec #,idx val))))
47 (syntax (field-name ...))))))))))