(define (make-counter) (let ((var 0)) (lambda () (set! var (+ 1 var))))) (define counter1 (make-counter)) (assert (= (counter1) 1)) (define counter2 (make-counter)) (assert (= (counter2) 1)) (assert (= (counter2) 2)) (assert (= (counter1) 2)) (assert (= (counter1) 3)) (assert (= (counter2) 3)) (assert (= (counter2) 4)) (assert (= (counter2) 5)) (assert (= (counter1) 4)) (assert (= (counter1) 5)) (define (g) (define x 0) (lambda () (define temp x) (mutate x (+ x 1)) temp)) (define (make-key-counter) ((lambda (:keys var) (lambda () (mutate var (+ 1 var)) var)) :var 0)) (define key-counter1 (make-key-counter)) (assert (= (key-counter1) 1)) (define key-counter2 (make-key-counter)) (assert (= (key-counter2) 1)) (assert (= (key-counter2) 2)) (assert (= (key-counter1) 2)) (assert (= (key-counter1) 3)) (assert (= (key-counter2) 3)) (assert (= (key-counter2) 4)) (assert (= (key-counter2) 5)) (assert (= (key-counter1) 4)) (assert (= (key-counter1) 5))