(define-syntax symbolic-accessor (syntax-rules () ([symbolic-accessor members ...] (let* (members ...) (call/cc (lambda (yield) (yield (lambda (p) (cond ([eq? p (car 'members)] (cadr 'members)) ... (else (error "input not found"))))))))))) ;usage ------- #1> (define ob (symbolic-accessor (a 10) (b 20) (c 30))) #2> (ob 'a) >>> 10 #3> (ob 'b) >>> 20 #4> (define ob (symbolic-accessor (a 10) (b 20) (c (lambda (x) (set! a x))))) #5>(ob 'a) >>>10 #6>((ob 'c) 20) >>> Error: call of non-procedure: (lambda (x) (set! a x)) Call history: ((ob (quote c)) 20) (ob (quote c)) (quote c) (##core#quote c) ((ob (quote c)) 20) (ob (quote c)) (eq?387 p385 (car388 (quote389 (a 10)))) (car388 (quote389 (a 10))) (eq?387 p385 (car388 (quote389 (c (lambda (x) (set! a x)))))) (car388 (quote389 (c (lambda (x) (set! a x))))) (cadr390 (quote389 (c (lambda (x) (set! a x))))) <--