(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)
.(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)
.(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.(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.