(a)
(define-cbr (f a b)
(swap a b))
; Produces 2:
(let ((x 1) (y 2))
(f x y)
x)
(b)
(define (do-f get1 get2 set1 set2)
(define-get/set-var a get1 set1)
(define-get/set-var b get2 set2)
(swap a b))
(c)
(let ((x 1) (y 2))
(f x y)
x)
(d)
(let ((x 1) (y 2))
(do-f (lambda () x)
(lambda () y)
(lambda (v) (set! x v))
(lambda (v) (set! y v)))
x)
(e)
(begin
(define (do-f get1 get2 set1 set2)
(define-get/set-var a get1 set1)
(define-get/set-var b get2 set2)
(swap a b))
(define-syntax f
(syntax-rules ()
((f actual ...)
(do-f (lambda () actual)
...
(lambda (v)
(set! actual v))
...) ))))
Example 8: Call-by-reference.
Back to Article