You are looking at historical revision 19210 of this page. It may differ significantly from its current revision.

regular define-record records don't support generalized set. This macro implements support for binding to srfi-17.

(define-syntax (define-gs-record x r c)
  (let ((type (cadr x))
        (fields (cddr x))
 (%begin (r 'begin))
 (%define-record (r 'define-record))
 (%define (r 'define))
 (%getter-with-setter (r 'getter-with-setter)))
      (,%define-record ,type ,@fields)
      ,@(map (lambda (f)
	(let* ((getter (string->symbol
			  (strip-syntax type))
			  (strip-syntax f)))))
	       (setter (string->symbol
			  (strip-syntax getter))
	  (list %define getter (list %getter-with-setter getter setter))))

(define-gs-record test a b c)

now you can say

 (define t (make-test 1 2 3))
 (set! (test-a t) 'new-val)