Praktikum 5

  1. x und y seien gegeben mit (define x (list 1 2 3)) und (define y (list 4 5 6)). Welches Ergebnis wird vom Interpretierer als Antwort auf die Auswertung eines jeden der folgenden Ausdrücke ausgegeben? Wie sieht die entspr. Kasten-Zeiger-Struktur aus? Ausdrücke zur Auswertung: (append x y), (cons x y), (list x y).
  2. Schreiben Sie eine Prozedur "blaetter", die eine Liste als Argument hat und eine Liste als Ergebnis liefert, deren Elemente alle Atome der ursprünglichen Liste und all ihrer Unterlisten in der Reihenfolge von links nach rechts sind. Benutzung: Sei (define x (cons (list 1 2) (list 3 4))). Dann ergibt die Auswertung von (blaetter (list x x)) das Ergebnis (1 2 3 4 1 2 3 4).
  3. Ein einfach verzweigtes Mobile besteht aus zwei Ästen, einem linken und einem rechten Ast. Jeder Ast ist ein Stab einer bestimmten Länge, von dem entweder ein Gewicht oder ein anderes einfach verzweigtes Mobile herabhängt. Wir können ein einfach verzweigtes Mobile mit Hilfe von zusammengesetzten Daten darstellen, indem wir es aus zwei Ästen z. B. mit "list" zusammensetzen:
    (define (konstr-mobile links rechts) (list links rechts))
    Ein Ast wird aus einer "laenge" (die eine Zahl sein muß) und einer "struktur" gebildet, die entweder eine Zahl (die ein einfaches Gewicht darstellt) oder ein anderes Mobile sein kann:
    (define (konstr-ast laenge struktur) (list laenge struktur))
    Erstellen Sie die Selektoren "linker-ast", "rechter-ast", "ast-laenge" und "ast-struktur", die die Komponenten der Datenstrukturen liefern. Definieren Sie dann mit deren Hilfe eine Prozedur "gesamt-gewicht", die das gesamte Gewicht eines Mobiles als Ergebnis liefert. Schließlich konstruieren Sie ein Prädikat, das prüft, ob ein Mobile im Gleichgewicht ist: Das Drehmoment des oberen linken Asten muß gleich dem Drehmoment des oberen rechten Astes sein und jedes der daranhängenden Teilmobiles muß im Gleichgewicht sein (Rekursion!). Zur Erinnerung: Drehmoment = Gewicht * Hebelarm.
  4. Diese Aufgabe befaßt sich mit der Darstellung von Mengen. Eine von mehreren möglichen Darstellungen für eine Menge ist eine Liste ihrer Elemente, wobei kein Element mehr als einmal vorkommt. Die leere Menge wird als leere Liste dargestellt. Geben Sie Implementierungen der folgenden Operatoren an:
    (element-der-menge? x m)       Prädikat, t <=> x ist Element von m
    (hinzufuegen-menge x m)        Fügt Element x zur Menge m hinzu
    (schnitt-menge m1 m2)          Bildet den Durchschnitt von m1 und m2
    (vereinigungs-menge m1 m2)     Bildet die Vereinigung von m1 m2
    Beachten Sie beim Formulieren der Algorithmen, daß die Randbedingung "kein Element kommt mehr als einmal vor" auch für die neu konstruierten Mengen gilt.