- (define (make-counter) ((lambda (var) (lambda () (mutate var (+ 1 var)) var)) 0))
-
- (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 (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))
|