(define make-stack  ; this file has an intentional error that 
 (lambda ()         ; we will correct in class.
   (lambda (msg  . args ) 
     (let ([stk '()])
       (case msg
         [(empty?) (null? stk)]
         [(push)   (set! stk (cons (car args) stk))]
         [(pop)    (let ([top (car stk)])
                      (set! stk (cdr stk))
                      top)]
         [else (errorf 'stack "illegal message to stack object: ~a" msg)])))))