(use srfi-69) (define objtbl (make-hash-table eq?)) (define (register! obj arg) (hash-table-update! objtbl obj identity (lambda () (list obj arg)))) (assert (eq? (register! 1 1) (register! 1 2))) (define-record foo bar) (define o1 (make-foo (list 23))) (define r1 (register! o1 1)) (assert (eq? r1 (register! o1 2))) (assert (eq? r1 (register! o1 3))) (foo-bar-set! o1 (list 42)) #;(assert (eq? r1 (register! o1 4))) (unless (hash-table? (hash-table-ref/default objtbl o1 #f)) (assert (not (hash-table-fold objtbl (lambda (k v i) (or i (eq? k o1))) #f))))