t-proc-with-setter.scm 644 B

123456789101112131415161718192021
  1. (define the-struct (vector 1 2))
  2. (define get/set
  3. (make-procedure-with-setter
  4. (lambda (struct name)
  5. (case name
  6. ((first) (vector-ref struct 0))
  7. ((second) (vector-ref struct 1))
  8. (else #f)))
  9. (lambda (struct name val)
  10. (case name
  11. ((first) (vector-set! struct 0 val))
  12. ((second) (vector-set! struct 1 val))
  13. (else #f)))))
  14. (and (eq? (vector-ref the-struct 0) (get/set the-struct 'first))
  15. (eq? (vector-ref the-struct 1) (get/set the-struct 'second))
  16. (begin
  17. (set! (get/set the-struct 'second) 77)
  18. (eq? (vector-ref the-struct 1) (get/set the-struct 'second))))