(import scheme locals simple-tests (only (chicken condition) condition-case)) (print "\nexpand counter ...") (pe ' (local ((state 0)) (define (counter-ref) state) (define (counter-add!) (set! state (+ state 1))) (define (counter-reset!) (set! state 0))) ) (local ((state 0)) (define (counter-ref) state) (define (counter-add!) (set! state (+ state 1))) (define (counter-reset!) (set! state 0))) (print "\nexpand contrived example ...") (pe ' (localrec ((xx (lambda (x) (* x x))) (yy (lambda (y) 1 2 3 (+ y y))) (zz 5) (uu (lambda (u . us) #f)) (vv (lambda vs 10 20)) (ww (lambda ws #t))) (define aa (lambda (a) (+ zz (* 2 (xx a))))) (define (bb b) 4 5 6 (* zz (* (xx b) (xx b)))) (define cc (* 2 zz)) (define (dd) (or (uu 10 20 30) (ww))) (define (ee e) (vv #t #f))) ) (localrec ((xx (lambda (x) (* x x))) (yy (lambda (y) 1 2 3 (+ y y))) (zz 5) (uu (lambda (u . us) #f)) (vv (lambda vs 10 20)) (ww (lambda ws #t))) (define aa (lambda (a) (+ zz (* 2 (xx a))))) (define (bb b) 4 5 6 (* zz (* (xx b) (xx b)))) (define cc (* 2 zz)) (define (dd) (or (uu 10 20 30) (ww))) (define (ee e) (vv #t #f))) (localrec ( (my-odd? (lambda (k) (if (zero? k) #f (my-even? (- k 1))))) (my-even? (lambda (k) (if (zero? k) #t (my-odd? (- k 1))))) ) (define (odd-or-even k) (if (my-odd? k) 'odd 'even))) (define-test (local?) "counter" (= (counter-ref) 0) (counter-add!) (counter-add!) (= (counter-ref) 2) (counter-reset!) (= (counter-ref) 0) "contrived example" (= (aa 2) 13) (= (bb 2) 80) (= cc 10) (dd) (= (ee 100) 20) (not (condition-case (vv) ((exn) #f))) "odd-or-even" (eq? (odd-or-even 5) 'odd) (eq? (odd-or-even 120) 'even) (not (condition-case (my-odd? 5) ((exn) #f))) ) (compound-test (LOCAL) (local?) )