(load "ub10-3c.scm") ;;; SIGNATUR ;;; make-traffic-light-group: list(traffic-light) -> traffic-light-group ;;; ERKLÄRUNG ;;; Konstruktorfunktion für Objekte der Klasse traffic-light-group. Das ;;; Argument ist eine Liste von traffic-light-Objekten. ;;; Die Klasse kennt folgende Methoden: ;;; step: -> VOID ;;; (send g 'step) führt dazu, daß alle Ampeln in der Ampelgruppe in den ;;; nächsten Zustand übergehen. ;;; (send g 'reset) setzt alle Ampeln in den Zustand rot. ;;; DEFINITION (define make-traffic-light-group (lambda (traffic-lights) (lambda (message) (letrec ((send-to-list (lambda (lst msg) (if (not (null? lst)) (begin (send (car lst) msg) (send-to-list (cdr lst) msg)))))) (case message ((step) (lambda (this) (send-to-list traffic-lights 'step))) ((reset) (lambda (this) (send-to-list traffic-lights 'reset))) (else (make-no-method 'traffic-light-group message))))))) (define g (make-traffic-light-group (list (make-traffic-light "Ampel 1") (make-traffic-light "Ampel 2") (make-traffic-light-counterpart "Ampel 3")))) (send g 'step) (newline) (send g 'reset) (newline) (send g 'step) (newline) (send g 'step) (newline)