(define make-plane (let ((flight 0)) (lambda (from to flying-time) (define (random-number n) ;; Generate a random number between 1 and n (+ 1 (random n))) (let ((ground-time (random-number 4)) (my-flight-no flight) (current-time 0)) (define (plane message) (cond ((eq? message 'install) (lambda (self) ...)) ((eq? message 'airplane?) (lambda (self) true)) ((eq? message 'destination) (lambda (self) to)) ((eq? message 'flight) (lambda (self) my-flight-no)) ((eq? message 'clock-tick) (lambda (self) ...)) (else (get-method message ...)))) (set! flight (+ flight 1)) plane)))) (define (make&install-plane from to flying-time) (make&install-object make-plane from to flying-time))