; Brian Alliet ; Programming Language Theory ; 4005-710-01 (define client1 (let* ((x 0) (sequence (lambda () (begin (set! x (+ x 1)) x))) (y (sequence)) (z (sequence)) ) (list x y z) ) ) (define (make-sequence x) (lambda () (begin (set! x (+ x 1)) x))) (define (apply-sequence s) (s)) (define client2 (let* ((x 0) (sequence (make-sequence x)) (y (apply-sequence sequence)) (z (apply-sequence sequence))) (list x y z))) (define-datatype sequence2 sequence2? (make-sequence2 (x number?))) (define (apply-sequence2 s) (cases sequence2 s (make-sequence2 (x) (begin (set! x (+ x 1)) x)))) (define client3 (let* ((x 0) (sequence (make-sequence2 x)) (y (apply-sequence2 sequence)) (z (apply-sequence2 sequence))) (list x y z)))