(define make-shelter (lambda() (define animals nil) (define super (make-base-object)) ; (define accept (lambda(ananimal) (define xanimal (locate (lambda(x) (equal ananimal x)) animals)) (if (equal xanimal false) ((lambda() (define animals (cons ananimal animals)) true)) false))) ; (define dismiss (lambda(ananimal) (define xanimal (locate (lambda(x) (equal ananimal x)) animals)) (if (equal xanimal false) false ((lambda() (define animals (remove ananimal animals)) true))))) ; (define find (lambda(aname) (define xanimal (locatex (lambda(x) (equal aname ((x 'get-name)))) animals)) xanimal)) ; (define display (lambda() (for-each (lambda(x) ((x 'who-are-you))) animals))) ; (define self (lambda(msg) (if (equal msg 'accept) accept (if (equal msg 'dismiss) dismiss (if (equal msg 'find) find (if (equal msg 'display) display (super msg))))))) self)) |
Georg P. Loczewski 2004-03-05