(require 'rep.test.framework) (define (make-stack) (let ((s '())) (define (push x) (setq s (cons x s))) (define (pop) (if (null s) (error "Empty stack -- POP") (prog1 (car s) (setq s (cdr s))))) (define (initialize) (setq s '()) 'done) (define (dispatch message) (cond ((eq message 'push) push) ((eq message 'pop) (pop)) ((eq message 'initialize) (initialize)) (t (error "Unknown request -- STACK: %s" message)))) dispatch)) (define (pop stack) (stack 'pop)) (define (push stack value) ((stack 'push) value)) (defvar st (make-stack)) (push st 3) (push st 4) (assert (= 4 (pop st))) (assert (= 3 (pop st)))