(define-syntax define-record (syntax-rules () ((_ ?record (?ctor ?arg ...) ?pred (?slot ?reader ?writer) ...) (begin (define (?ctor ?arg ...) (cons '?record (list '?arg ...))) (define (?pred rec) (and (list? rec) (eqv? (car rec) '?record))) (define (?reader r) (list-ref (cdr r) (list-index (lambda (y) (eqv? y '?slot)) (list '?arg ...)))) ...))))