Logische%20Programmierung:%20Prolog - PowerPoint PPT Presentation

About This Presentation
Title:

Logische%20Programmierung:%20Prolog

Description:

Logische Programmierung: Prolog Proseminar Programmiersprachen WS 2003/2004 Jochen Frey Betreuer: Prof. Dr. Gert Smolka bersicht Deklarative Programmierung Zwei ... – PowerPoint PPT presentation

Number of Views:69
Avg rating:3.0/5.0
Slides: 32
Provided by: Joch47
Category:

less

Transcript and Presenter's Notes

Title: Logische%20Programmierung:%20Prolog


1
Logische ProgrammierungProlog
  • Proseminar Programmiersprachen WS 2003/2004
  • Jochen Frey
  • Betreuer Prof. Dr. Gert Smolka

2
Übersicht
3
Deklarative Programmierung
  • Zwei Interpretationen
  • Prozedurale Interpretation
  • Wie wird etwas berechnet ?
  • Deklarative Interpretation
  • Was wird berechnet ?
  • Logische Programmierung ist deklarative
    Programmierung mit Prädikatenlogik

4
Geschichte von Prolog
  • Entwickelt 1970 (Kowalski, Colmerauer)
  • PROrammieren in LOGik
  • Beeinflusste viele Entwicklungen
  • 5th Generation Project
  • Deductive Databases
  • Constraint Logic Programming

5
Terme
  • Grundlegende Datenstruktur in Prolog
  • Grammatik
  • ltTermgt ltVariablegt ltETermgt
  • ltETermgt ltZahlgt ltSymbol(Term, , Term)gt
  • ltFaktgt ltETermgt
  • ltRegelgt ltETerm - ETerm, , ETermgt

6
Logische Programme
  • Folge von Klauseln (Fakten und Regeln)

H - B1, , B2
Regelkopf
Regelkörper
Deklarative Semantik
Prozedurale Semantik
H erfüllt, falls zuerst B1 und dann B2 erfüllt
werden können
H erfüllt, fall sowohl B1 als auch B2 erfüllt
werden können
Für die Abarbeitung von Prolog-Programmen wird
den Programmklauseln eine prozedurale Semantik
unterstellt
7
Beispiel Biblische Familie
  • father(terach, abraham).
  • father(terach, nachor).
  • father(terach, haran).
  • father(abraham, isaac).
  • father(haran, lot).
  • father(haran, milcah).
  • father(haran, yiscah).
  • mother(sarah, isaac).
  • son(X,Y) - father(Y,X), male(X).
  • daughter(X,Y) - father(Y,X), female(X).

male(terach). male(abraham). male(nachor). male(ha
ran). male(isaac). male(lot). female(sarah). fema
le(milcah). female(yiscah).
Fakten
Regeln
8
Anfragen
  • Prolog prüft nun, ob die Anfrage eine logische
    Konsequenz des Programms ist
  • Ist dies der Fall so antwortet Prolog mit Yes
  • Andernfalls mit No
  • Hier

?- father(abraham, isaac).
Yes
9
Unifikation
  • Lösen von Gleichungen zwischen Termen
  • durch Unifikation
  • finden einer Substitution s zwischen Termen t1
    und t2, mit s(t1) s(t2)
  • allgemeinste Lösung wird als allgemeinster
    Unifikator bezeichnet

10
Ein Unifikations-Algorithmus
  • f(s1, , sn) f(t1, , tn) ersetzen durch
  • s1t1, , sntn
  • f(s1, , sn) g(t1, , tm), mit f?g Fehler
  • xx löschen
  • tx, wobei t keine Variable ist ersetzen durch
    xt
  • xt, wobei x nicht in t aber woanders
    Substitution
  • vorkommt x/t anwenden
  • xt, wobei x in t vorkommt und x?t Fehler

11
Beispiele
  • father(X, isaac)
  • father(abraham, Y)
  • Y
  • father(X, isaac)
  • father(haran, lot)
  • father(abraham, isaac)
  • father(X, isaac)
  • mother(sarah, isaac)

Xabraham Yisaac
Yfather(X,isaac)
nicht unifizierbar
nicht unifizierbar
12
Beispiel Biblische Familie
Datenbasis
Anfrage
Antwort
  • father(terach, abraham).
  • father(terach, nachor).
  • father(terach, haran).
  • father(abraham, isaac).
  • father(haran, lot).
  • father(haran, milcah).
  • father(haran, yiscah).
  • mother(sarah, isaac).

?- father(abraham, isaac).
Yes
13
Auswertungsmechanismus
  • Prolog sucht eine Auflösungssequenz um eine
    Anfrage zu beantworten durch
  • Backward-Chaining (top-down)
  • Tiefensuche

14
Beispiel
father(abraham,isaac). father(haran,lot). father(h
aran,milcah). father(haran,yiscah). male(isaac).
male(lot). female(milcah). female(yiscah). son(X
,Y) - father(Y,X), male(X). daughter(X,Y) -
father(Y,X), female(X).
?- son(X,abraham).
father(abraham,X),male(X).
Xisaac male(isaac).
Output Xisaac
15
Rücksetzen
  • Problem
  • Bei der Unifikation innerhalb einer Resolution
    einer Anfrage tritt ein Fehler auf
  • Lösung
  • Rückschritt zum letzten Punkt an dem Prolog eine
    Auswahl treffen musste
  • Rückgängigmachen der Variablenbindungen
  • Nächste Klausel auswählen

16
Rücksetzen
father(abraham,isaac). father(haran,lot). father(h
aran,milcah). father(haran,yiscah). male(isaac).
male(lot). female(milcah). female(yiscah). son(X
,Y) - father(Y,X), male(X). daughter(X,Y) -
father(Y,X), female(X).
?- daughter(X,haran)?
father(haran,X),female(X).
Xlot female(lot).
Xmilcah female(milcah).
Xyiscah female(yiscah).
No
Output Xmilcah
Output Xyiscah

17
Beispiel member
  • member(X, XXs).
  • member(X, YYs) - member(X, Ys).

?- member(X, 1,2,3).
?- member(X, 2,3).
X1
?- member(X, 3).

X2

X3
18
Beispiel append
  • append(, Ys, Ys).
  • append(XXs, YS, XZs) - append(Xs, Ys, Zs).

?- append(a,b,c,d,a,b,c,d).
?- append(b,c,d,b,c,d).
?- append(,c,d,c,d).
Yes
19
Beispiel last
  • last(X, X).
  • last(YYs, X) - last(Ys, X).

?- last(1,2,3, X).
?- last(2,3, X).
?- last(3, X).
X3
Alternative last(List, Last) - append(_,
Last, List).
20
Evaluation arithmetischer Ausdrücke
  • built-in Prädikat is/2
  • nimmt eine Variable und ein Term als Argumente
  • berechnet den Term
  • und bindet die Variable an den berechneten Term
  • falls linkes Argument keine Variable Vergleich
  • Fehlermeldung wenn im rechten Argument eine
    ungebundene Variable steht

21
Beispiele
  • 5 is 23 Yes
  • X is 23 X5
  • X is Y3 Fehler
  • Unterschied X 23 Unifikation

22
Beispiele
  • if_then_else if P then Q else R
  • Intuitiv
  • if_then_else(P, Q, R) - P, Q.
  • if_then_else(P, Q, R) - not P, R.
  • if_then_else(P, Q, R) - P, Q.
  • if_then_else(P, Q, R) - R.
  • Lösung mit Cut
  • if_then_else(P, Q, R) - P, !, Q.
  • if_then_else(P, Q, R) - R.

ineffizient
falsch
23
built-in Prädikat cut ( ! )
  • Idee Suchbäume stutzen um unnötige
    Berechnungen zu vermeiden
  • 2 Arten
  • grüne cuts schneiden Suchbäume weg, die nicht
    zur Lösung beitragen Effizienssteigerung
  • rote cuts schneiden Suchbäume weg, die Lösungen
    enthalten
  • Bedeutung des Prog. wird geändert
  • meistens Programmierfehler

24
Negation
  • Implementierung mit cut
  • not(X) - X, !, fail.
  • not(X).
  • Unterscheiden von Fehlschlagen und Erfolg einer
    Berechnung
  • Beispiel alle Elemente einer Liste ? 3
  • ?- member(X, 1,2,3,4), not(X3).

25
Problem mit built-in Prädikaten
  • Der Programmierer muss über die Resolution
    nachdenken
  • Es besteht also keine deklarative Semantik mehr
  • Falsche Reihenfolge führt zu Fehlern
  • Beispiele

?- X is Y3, Y 2.
?- Y 2, X is Y3.
X 5
Fehler
X 1 X 2 X 4
?- member(X, 1,2,3,4), not(X3).
?- not(X3), member(X, 1,2,3,4).
No.
26
freeze
freeze(X, Goal).
  • Die Ausführung eines Ziels kann verzögert werden,
    bis die Variable X gebunden wird
  • Somit kann z. B. die Problematik von einigen
    built-in Prädikaten behoben werden

?- freeze(Y,(X is Y3)), Y 2.
X 5
?- freeze(X, not(X3)), member(X, 1,2,3,4).
X 1 X 2 X 4
27
N-Dame-Problem
  • Auf einem N x N Schachbrett sollen N Damen so
    angeordnet
  • werden, dass sie sich nicht gegenseitig schlagen
    können

1
2
Lösung 2,4,1,3
3
4
28
N-Dame-Problem
  • queens(N,Qs) - range(1,N,Ns), permutation(Ns,Qs),
    safe(Qs).
  • range(M,N,MNs) - M lt N, M1 is M1,
    range(M1,N,Ns).
  • range(N,N,N).
  • permutation(Xs,ZZs) - select(Z,Xs,Ys),
    permutation(Ys,Zs).
  • permutation(,).
  • safe(QQs) - safe(Qs), not(attack(Q,Qs)).
  • safe().
  • attack(X,Xs) - attack(X,1,Xs).
  • attack(X,N,YYs) - X is YN.
  • attack(X,N,YYs) - X is Y-N.
  • attack(X,N,YYs) - N1 is N1, attack(X,N1,Ys).

29
Zusammenfassung
  • deklarative Programmiersprache
  • Suche eingebaut
  • sehr effiziente Techniken für Rück-setzen und
    Unifikation
  • fehlende Typen
  • keine Module
  • problematische Arithmetik
  • spezifische Kontrollmechanismen

30
Anwendungen
  • Automatisierte Beweise
  • Expertensysteme
  • Computerlinguistik
  • Rapid Prototyping
  • ...

31
Literatur
  • Kowalski, R. Algorithm Logic Control,
    Communication of the ACM 22, pp.424-436, 1979
  • Mitchell, J.C. Concepts in Programming
    Languages. 1.Aufl., Cambridge University Press,
    2003
  • Sterling, L. Shapiro, E. The Art of Prolog. 1.
    Aufl., MIT, 1986
Write a Comment
User Comments (0)
About PowerShow.com