構造体っぽいものをマクロで実装
(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))
徐々に機能を足していこう。