(define (make-monitor proc)
  ; Mit make-monitor wird eine Prozedur erzeugt, die <proc> entspricht,
  ; aužer daž die erzeugte Prozedur mitz„hlt, wie of sie aufgerufen wird.

  ; "make-monitor" ist ein Beispiel zum Objekt-Orient. "Meassage passing" !!! 

  ; proc muž eine Prozedur sein
  (invariant (procedure? proc))

  ; Lokale Definition des Aufrufz„hlers "count"
  (define count 0) ; Anfangswert 0

  ; Lokale Defintion der 'Lazy-Procedure' "dispatch"
  (Lazy-define (dispatch &rest m)
    (cond ((= ''reset (car m)) (set! count 0) "Counter reseted !")
          ((= ''count (car m)) count)                  ; Z„hlerstand ?
          (T (set! count (1+ count)) (apply proc m)))) ; erh”he Z„hler
  
  ; Rumpf von "make-monitor"
  (debug "Now monitoring " proc)
  dispatch) ; Wert von "make-monitor" ist die Prozedur "dispatch" !!!

; Ein Beispiel:
;
; (debug-on)
; (define mon-cons (make-monitor cons)) -->Now monitoring cons
;                                          mon-cons
; (mon-cons 'count)                     -->0       ; 0 Aufrufe
; (mon-cons 'a 'b)                      -->(a . b) ; Wirkungsweise genau
; (mon-cons 'a '(b c))                  -->(a b c) ; wie "cons".
; (mon-cons 'count)                     -->2       ; 2 Aufrufe
; (mon-cons 'reset)                     -->Counter reseted !
; (mon-cons 'count)                     -->0 



