Lösungsvorschlag Prolog 2

Werbung
Dr. Christian Săcărea
“Babeş–Bolyai” Universität, Cluj-Napoca
Fachbereich Mathematik und Informatik
Wintersemester 2016/2017
Lösungshinweise zur 2. Übung
Logische und funktionale Programmierung
Gruppenübungen:
PROLOG-Systeme lassen sich als relationale Datenbank-Systeme (DBSysteme) einsetzen, indem Beziehungen zwischen Daten in geeigneter Form als Prädikate formuliert und die Wiba
(als Gesamtheit der Fakten) als Datenbasis aufgefasst wird.
Tabelle mit den Vertreternamen:
Vertreternummer Vertretername Vertreterwohnort Vertreterprovision Kontostand
8413
meyer
bremen
0.07
725.15
5016
meier
hamburg
0.05
200.00
1215
schulze
bremen
0.06
50.50
Tabelle mit den Artikelstammdaten:
Artikelnummer Artikelname Artikelpreis
12
oberhemd
39.80
22
mantel
360.00
11
oberhemd
44.20
13
hose
110.5
Tabelle mit den Umsatzdaten:
Vertreternummer Artikelnummer
8413
12
5016
22
8413
11
1215
11
5016
22
8413
13
1215
13
1215
12
8413
11
Artikelstück Verkaufstag
40
24
10
24
70
24
20
25
35
25
35
24
5
24
10
24
20
25
So entnehmen wir z.B. der 3. Zeile der letzten Tabelle, dass der Vertreter mit der Nummer 8413
(also der Vertreter meyer aus bremen mit der Vertreterprovision von 7% und dem Kontostand
in Höhe von EUR 725.15) 70 Artikel der Nummer 11 (also oberhemden zum Preis von EUR
44.20) am 24. des laufenden Monats verkauft hat.
(G 5)Relationale Datenbanken
Gib ein PROLOG-Programm an, bei dem die oben aufgeführten Tabelleninhalte als Argumente
von geeigneten Prädikaten enthalten sind!
Lösung:
vertreter(8413,meyer, bremen, 0.07, 725.15).
vertreter(5016,meier, hamburg, 0.05, 200.00).
vertreter(1215,schulze, bremen, 0.06, 50.50).
artikel(12, oberhemd, 39.80).
artikel(22, mantel, 360.00).
artikel(11, oberhemd, 44.20).
artikel(13, hose, 110.20).
umsatz(8413, 12, 40, 24).
umsatz(5016, 22, 10, 24).
umsatz(8413, 11, 70, 24).
umsatz(1215, 11, 20, 25).
umsatz(5016, 22, 35, 25).
umsatz(8413, 13, 35, 24).
umsatz(1215, 13, 5, 24).
umsatz(1215, 12, 10, 24).
umsatz(8413, 11, 20, 25).
(G 6)Goals
Formuliere geeignete Goals zu den folgenden Anfragen an die Datenbasis:
a) Welcher Artikel trägt die Artikelnummer 12?
b) Hat der Vertreter mit der Nummer 1215 am 25. des laufenden Monats einen Umsatz
getätigt?
c) Wurden vom Vertreter mit der Nummer 8413 am 24. des laufenden Monats Hosen verkauft?
d) Gibt es Umsätze fur Artikel mit der Nummer 11 oder der Nummer 13 am 25. des laufenden
Monats?
Lösung:
a) artikel(12,A Name,A Preis).
b) vertreter(1215,V Name,X,Y,Z),umsatz(1215,U,V,25).
c) umsatz(8413,A Nr,X,24), artikel(A Nr,hose,Y), vertreter(8413,Z,U,V,W).
d) umsatz(X,11,Y,25);umsatz(Z,13,U,25).
(G 7)Prädikate
Nimm ein Prädikat namens tätigkeit in die Wiba auf, mit dem angefragt werden kann, ob
ein bestimmter Vertreter einen bestimmten Artikel an einem bestimmten Tag des laufenden
Monats verkauft hat! Ermittle mit Hilfe dieses Prädikats das Ergebnis der folgenden Anfrage:
?- tätigkeit(meyer,hose,24).
Lösung:
tätigkeit(V Name,A Name,V Tag):artikel(A Nr,A Name,A Preis),
Konto).
umsatz(V Nr,A Nr,A Stück,V Tag),
vertreter(V Nr,V Name,V Ort,V Prov,V
(G 8)Ableitungsbäume
Überlege, wie die folgenden Anfragen auf der Basis der Wiba, die in dem 3. Labor gegeben ist,
durch die Inferenzkomponente des PROLOG-Systems bearbeitet werden!
a) ? ic(ha,fu).
b) ? ic(ha,mü).
c) ? ic(br,ha).
Lösung:
a) Um das Goal ic(ha,fu) ableiten zu können, muss es mit dem Regelkopf ic(Von,Nach)
unifizierbar sein. Dies läßt sich für den 1. Regelkopf durch die Instanzierungen
Von:=ha
Nach:=fu
erreichen. Somit ist die Ableitbarkeit des aktuellen Subgoals dic(ha,fu) zu überprüfen. Dieses
Subgoal läßt sich mit der 2. Klausel in der Wiba unifizieren. Somit ist das Subgoal, damit
der Kopf der 1. Regel und folglich auch das Goal ic(ha,fu) ableitbar. Dies demonstriert der
folgende Ableitungsbaum:
b) Die PROLOG-Inferenzkomponente unifiziert das Goal ic(ha,mu) zunächst mit dem 1. Regelkopf. Dazu werden die Instanzierungen
Von:=ha
Nach:=mü
vorgenommen. Anschließend ist die Ableitbarkeit des Subgoals dic(ha,mü) zu überprüfen.
Dieses Subgoal läßt sich mit keiner der ersten 4 Klauseln und somit nicht innerhalb der Wiba
unifizieren. Wir beschreiben dies durch den folgenden Ableitungsbaum:
Wegen der logischen ODER-Verbindung der Regeln, ist anschließend ein Backtracking durchzuführen und somit der nachfolgende Regelkopf mit dem Prädikat ic(Von,Nach) auf eine Unifizierung zu untersuchen. Die Unifizierung gelingt mit dem Kopf der 2. Regel, indem die folgenden
Instanzierungen durchgeführt werden:
Von:=ha
Nach:=mü
Der Regelkopf ic(ha,mü) ist gemäß der Regel
ic(Von,Nach):-dic(Von,Z),dic(Z,Nach).
folglich dann ableitbar, wenn die beiden neuen Subgoals dic(ha,Z) und dic(Z,mü) - für eine Instanzierung von Z - abgeleitet werden können. Der anschließende Versuch - nach dem
Backtracking in Schritt 14 zu Schritt 15 - mit der Instanzierung Z:=fu ist erfolgreich, weil das
Subgoal dic(fu,mu) mit dem Fakt dic(fu,mü). unifiziert werden kann. Dies zeigt der folgende
Ableitungsbaum:
Somit läßt sich das Subgoal dic(fu,mü) und damit der Regelrumpf dic(ha,fu), dic(fu,mü)
der 2. Regel, folglich der zugehörige unifizierte Kopf der 2. Regel - ic(ha,mü) - als (Parent-)
Goal und somit das Goal ic(ha,mu) aus der Wiba ableiten.
Herunterladen