構造体っぽいものをマクロで実装

(define-macro (define-simple-struct name . elements)
  `(begin
     (define (,(symbol-concat 'make- name) ,@elements)
       (vector ,@elements))
     ,@(map-with-index (lambda (i element) `(define (,(symbol-concat name '- element) x) (vector-ref x ,i))) elements)
     ,@(map-with-index (lambda (i element) `(define (,(symbol-concat name '- 'set '- element '!) x v) (vector-set! x ,i v))) elements)))

こうやって使います。

(define-simple-struct book title author)

(let1 book (make-book #f #f)
  (book-set-author! book 'higepon))

徐々に機能を足していこう。