(define counter
(lambda (x)
(define n x)
(define up
(lambda (d)
(set! n (+ n d))
n))
(define reset
(lambda ()
(set! n x)
n))
(define receive-message
(lambda (msg)
(cond ((equal? msg 'up) up)
((equal? msg 'reset) reset))))
receive-message))
|
(define bag
(lambda ()
(define mybag ())
(define error
(lambda ()
(write 'error)))
(define show
(lambda ()
mybag))
(define add
(lambda (obj)
(set! mybag (cons obj mybag))))
(define get-one
(lambda ()
(if (null? mybag)
(error)
((lambda (x) (set! mybag (cdr x)) (car x)) mybag))))
(define receive-message
(lambda (msg)
(cond ((equal? msg 'show) show)
((equal? msg 'add) add)
((equal? msg 'get-one) get-one)
(else error))))
receive-message))
|