source: project/wiki/define-record and srfi 17 @ 36676

Last change on this file since 36676 was 19210, checked in by felix winkelmann, 9 years ago

converted to use define-syntax

File size: 899 bytes
Line 
1regular define-record records don't support generalized set. This macro implements support for binding to srfi-17.
2
3 (define-syntax (define-gs-record x r c)
4   (let ((type (cadr x))
5         (fields (cddr x))
6         (%begin (r 'begin))
7         (%define-record (r 'define-record))
8         (%define (r 'define))
9         (%getter-with-setter (r 'getter-with-setter)))
10     `(,%begin
11       (,%define-record ,type ,@fields)
12       ,@(map (lambda (f)
13                (let* ((getter (string->symbol
14                                (string-append
15                                 (symbol->string
16                                  (strip-syntax type))
17                                 "-"
18                                 (symbol->string
19                                  (strip-syntax f)))))
20                       (setter (string->symbol
21                                (string-append
22                                 (symbol->string
23                                  (strip-syntax getter))
24                                 "-set!"))))
25                  (list %define getter (list %getter-with-setter getter setter))))
26              fields))))
27 
28(define-gs-record test a b c)
29
30now you can say
31
32  (define t (make-test 1 2 3))
33  (set! (test-a t) 'new-val)
Note: See TracBrowser for help on using the repository browser.