Aufgabenblatt 4

Werbung
Universität Würzburg
Deduktive Datenbanken
Institut für Informatik
Prof. Dr. Dietmar Seipel
Florian Stefan
Sommersemester 2012
Aufgabenblatt 4
Aufgabe 5 (Erreichbarkeit in Graphen)
(4 + 2 Punkte)
a) Implementieren Sie ein Prolog–Prädikat, das beim Aufruf
reachable node(Edges, V, W)
einen – und bei Backtracking alle – von einem Knoten V aus erreichbaren Knoten W
eines gerichteten Graphen bestimmt.
b) Implementieren Sie auf der Basis von reachable node/3 ein weiteres Prolog–
Prädikat, das beim Aufruf
reachable nodes(Edges, V, Ws)
mittels findall/3 die Liste Ws aller von einem Knoten V aus erreichbaren Knoten
W bestimmt.
Der gerichtete – und möglicherweise zyklische – Graph soll dabei in Form einer Liste
Edges von Kanten der Art X-Y gegeben sein.
Aufgabe 6 (Rotation für Suchbäume)
(4 Punkte)
Implementieren Sie ein Prolog–Prädikat, das beim Aufruf
binary tree rotate(left, Tree 1, Tree 2)
einen vorgegebenen Suchbaum Tree 1 um die Wurzel nach links rotiert, so daß der neue
Suchbaum Tree 2 ist.
Verwenden Sie zum Zerlegen des Suchbaums und zum Aufbau des neuen Suchbaums –
wiederholt – das Prädikat binary tree parse/4.
Aufgabe 7 (Symbolisches Differenzieren)
(5 + 5 Punkte)
Betrachten Sie folgendes Prolog–Programm diff.pl zum Differenzieren:
diff(X, X, 1) :!.
diff(C, X, 0) :atomic(C).
diff(X^N, X, N*X^M) :N > 0,
M is N - 1.
diff(sin(X), X, cos(X)).
diff(e^X, X, e^X).
diff(F+G, X, DF+DG) :diff(F, X, DF),
diff(G, X, DG).
diff(C*F, X, C*DF) :atomic(C),
!,
diff(F, X, DF).
a) Geben Sie die Zwischenschritte bei der Auswertung des folgenden Ausdrucks an:
diff(e^x + 4 * x^3 + 2, x, DF)
b) Wie kann man diff.pl erweitern, damit folgender Term korrekt differenziert wird ?
5 * e^x * log(x) + sin(x) * x^6
Beachten Sie unbedingt, daß bei den Aufrufen des Prädikats diff/3 die Unbekannte x
durch eine Konstante – d.h. beginnend mit einem Kleinbuchstaben – repräsentiert sein
muß.
Abgabe: bis Freitag, den 25. Mai 2012, in der Vorlesung
Abgabe in 3er–Gruppen möglich
Herunterladen