Praktikum 9

  1. Was gibt der Interpretierer auf die folgenden Eingaben aus? Zeichnen Sie Kasten-Zeiger-Diagramme, bevor Sie Ihr Ergebnis mit dem Rechner überprüfen!
    (define (append! x y)
      (set-cdr! (letztes x) y)
      x)
    (define (letztes x)
      (if (null? (cdr x))
          x
          (letztes (cdr x))))
    
    (define x '(a b))
    (define y '(c d))
    (define z (append x y))
    z
    (cdr x)
    (define w (append! x y))
    w
    (cdr x)
    
  2. Werten Sie die folgenden Ausdrücke aus! Welche Strukturen haben v und w? Was würde der Interpretierer als Werte von v und w ausgeben?
    (define (mysterioes x)
      (define (schleife x y)
        (if (null? x)
            y
            (let ((temp (cdr x)))
              (set-cdr! x y)
              (schleife temp x))))
      (schleife x '()))
    
    (define v '(a b c d))
    (define w (mysterioes v))
    
  3. Statt mit Hilfe eines Zeigerpaares kann man Warteschlangen auch als Prozedur mit lokalem Zustand konstruieren. Der lokale Zustand besteht aus Zeigern auf den Anfang und das Ende einer gewöhnlichen Liste. Vervollständigen Sie die folgende Definition und geben Sie Implementierungen der Warteschlangenoperationen mit dieser Darstellung an.
    (define (konstr-warteschlange)
      (let ((anfangs-zgr ... ) (end-zgr ... ))
        <Definitionen interner Prozeduren>
        (define (zuteilen m) ... )
        zuteilen))