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.