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