Seems to work
[rops.git] / tests / closures.scm
blobf4dd99b2a25c8428a933602e53ba912e6446a2c9
1 (define assert-equal
2   (lambda (x y)
3     (if (= x y)
4         (quote ok)
5         (error "ASSERTION FAILED. Expected " x " got " y))))
7 (define x 1)
9 ;;; Closes over x
10 (define add-x (lambda (y) (+ x y)))
12 (set! x 3)
13 (assert-equal (add-x 2) 5) 
15 (define set-free-x
16   (lambda ()
17      (set! x 5)))
19 (set-free-x)
20 (assert-equal (add-x 3) 8)
22 ;;; X is bounded: should not modify outer environment
23 (define set-bounded-x
24   (lambda (x) (set! x 2)))
26 (set-bounded-x "dummy")
27 (assert-equal (add-x 3) 8) 
29 (set! x 0)
30 (define call-set-free-x
31   (lambda ()
32     (set-free-x)))
33 (call-set-free-x)
34 (assert-equal x 5)