Blatt 04
Transcrição
Blatt 04
Universität Würzburg Deduktive Datenbanken Institut für Informatik Prof. Dr. Dietmar Seipel Sommersemester 2015 Aufgabenblatt 4 Aufgabe 8 (Rotation für Suchbäume) (12 Punkte) Implementieren Sie ein Prolog–Prädikat, das beim Aufruf rotate(Mode, Tree 1, Tree 2) einen vorgegebenen Suchbaum Tree 1 um die Wurzel nach links (Mode=left) bzw. rechts (Mode=right) rotiert, so daß der neue Suchbaum Tree 2 ist. Verwenden Sie zur Repräsentation der Suchbäume die Notation t(W, L, R) aus der Vorlesung. Aufgabe 9 (Tennisdatenbank in Prolog) (6 + 8 + 14 = 28 Punkte) Wir betrachten das folgende deduktive Datenbankschema zum Tennis: hit(Set, Game, Point, Hit, Hand, Type, Time, X, Y). service(Set, Game, Player_Id). Zugehörige Beispieldaten für ein Tennis–Match könnten wie folgt aussehen: hit(1, 1, 1, 1, forehand, hit(1, 1, 1, 2, backhand, hit(1, 1, 1, 3, backhand, hit(1, 1, 1, 4, forehand, hit(1, 1, 2, 1, forehand, ... service(1, 1, ’A’). service(1, 2, ’B’). service(1, 3, ’A’). ... ground, ground, ground, ground, ground, ’00:00:42’, 0.17, -12.07). ’00:00:44’, -0.49, 5.89). ’00:00:46’, -3.92, -3.42). ’00:00:48’, 3.56, 2.06). ’00:01:19’, -0.27, -12.03). Diese Fakten sollen in Prolog–Termstrukturen in Field Notation der folgenden Form transformiert werden: set:[id:1]:[ game:[id:1, service:’A’]:[ point:[id:1]:[ hit:[id:1, hand:forehand, type:ground, time:’00:00:42’, x:0.17, y: -12.07]:[], hit:[id:2, hand:backhand, type:ground, time:’00:00:44’, x: -0.49, y:5.89]:[], hit:[id:3, hand:backhand, type:ground, time:’00:00:46’, x: -3.92, y: -3.42]:[], hit:[id:4, hand:forehand, type:ground, time:’00:00:48’, x:3.56, y:2.06]:[] ], point:[id:2]:[ hit:[id:1, hand:forehand, type:ground, time:’00:01:19’, x: -0.27, y: -12.03]:[], ... ], ... ] ... ] Solche Termstrukturen repräsentieren Xml–Elemente, und man kann sie mittels des Aufrufs dwrite(xml, Term) in Xml ausgeben. Schreiben Sie Prolog–Prädikate für folgende Aufgaben: a) Der Aufruf hit_to_field_notation(Set, Game, Point, Hit, Term) soll einen Schlag – gegeben durch Set, Game, Point und Hit – in eine Termstruktur Term der oben beschriebenen Form hit:[id:Hit, hand:Hand, type:Type, time:Time, x:X, y:Y]:[] in Field Notation transformieren. b) Der Aufruf point_to_field_notation(Set, Game, Point, Term) soll alle Schläge eines Ballwechsels – gegeben durch Set, Game und Point – in einer Termstruktur Term der oben beschriebenen Form point:[id:Point]:[...] in Field Notation zusammenfassen. c) Der Aufruf point_to_length(Term, Time) soll die zeitliche Länge Time eines Ballwechsels – gegeben durch eine Termstruktur Term in Field Notation – in Sekunden berechnen. Implementieren Sie dazu ein Prädikat time_difference/3, welches die Differenz zweier Zeitpunkte in Sekunden ermittelt. Dabei können Sie die Built–In–Prädikate findall/3, first/2 und last/2 von Prolog verwenden. Abgabe: bis Donnerstag, den 21. Mai 2015 in den Übungen oder in den Briefkasten Abgabe in 3er–Gruppen möglich