logische programmierung prolog l.
Download
Skip this Video
Download Presentation
Logische Programmierung: Prolog

Loading in 2 Seconds...

play fullscreen
1 / 31

Logische Programmierung: Prolog - PowerPoint PPT Presentation


  • 338 Views
  • Uploaded on

Logische Programmierung: Prolog. Proseminar Programmiersprachen WS 2003/2004 Jochen Frey Betreuer: Prof. Dr. Gert Smolka. Übersicht. Deklarative Programmierung. Zwei Interpretationen: Prozedurale Interpretation: „Wie wird etwas berechnet ?“ Deklarative Interpretation:

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Logische Programmierung: Prolog' - Anita


Download Now An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
logische programmierung prolog

Logische Programmierung:Prolog

Proseminar Programmiersprachen WS 2003/2004

Jochen Frey

Betreuer: Prof. Dr. Gert Smolka

bersicht
Übersicht

Logische Programmierung: Prolog

deklarative programmierung
Deklarative Programmierung
  • Zwei Interpretationen:
    • Prozedurale Interpretation:

„Wie wird etwas berechnet ?“

    • Deklarative Interpretation:

„Was wird berechnet ?“

  • Logische Programmierung ist deklarative Programmierung mit Prädikatenlogik

Logische Programmierung: Prolog

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

Logische Programmierung: Prolog

terme
Terme
  • Grundlegende Datenstruktur in Prolog
  • Grammatik:

<Term> ::= <Variable> | <ETerm>

<ETerm> ::= <Zahl> | <Symbol(Term, …, Term)>

<Fakt> ::= <ETerm>

<Regel> ::= <ETerm :- ETerm, …, ETerm>

Logische Programmierung: Prolog

logische programme
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

Logische Programmierung: Prolog

beispiel biblische familie
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(haran).

male(isaac).

male(lot).

female(sarah).

female(milcah).

female(yiscah).

Fakten

Regeln

Logische Programmierung: Prolog

anfragen
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

Logische Programmierung: Prolog

unifikation
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

Logische Programmierung: Prolog

ein unifikations algorithmus
Ein Unifikations-Algorithmus
  • f(s1, …, sn) = f(t1, …, tn) ersetzen durch

s1=t1, …, sn=tn

  • f(s1, …, sn) = g(t1, …, tm), mit f≠g Fehler
  • x=x löschen
  • t=x, wobei t keine Variable ist ersetzen durch x=t
  • x=t, wobei x nicht in t aber woanders Substitution

vorkommt {x/t} anwenden

  • x=t, wobei x in t vorkommt und x≠t Fehler

Logische Programmierung: Prolog

beispiele
Beispiele
  • father(X, isaac)

father(abraham, Y)

  • Y

father(X, isaac)

  • father(haran, lot)

father(abraham, isaac)

  • father(X, isaac)

mother(sarah, isaac)

X=abraham

Y=isaac

Y=father(X,isaac)

nicht unifizierbar

nicht unifizierbar

Logische Programmierung: Prolog

beispiel biblische familie12
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

Logische Programmierung: Prolog

auswertungsmechanismus
Auswertungsmechanismus
  • Prolog sucht eine Auflösungssequenz um eine Anfrage zu beantworten durch:
    • Backward-Chaining(top-down)
    • Tiefensuche

Logische Programmierung: Prolog

beispiel
Beispiel

father(abraham,isaac).

father(haran,lot).

father(haran,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).

X=isaac

male(isaac).

Output: X=isaac

Logische Programmierung: Prolog

r cksetzen
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

Logische Programmierung: Prolog

r cksetzen16
Rücksetzen

father(abraham,isaac).

father(haran,lot).

father(haran,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).

X=lot

female(lot).

X=milcah

female(milcah).

X=yiscah

female(yiscah).

No

Output: X=milcah

Output: X=yiscah

;

Logische Programmierung: Prolog

beispiel member
Beispiel: member

member(X, [X|Xs]).

member(X, [Y|Ys]) :- member(X, Ys).

?- member(X, [1,2,3]).

X=1

?- member(X, [2,3]).

;

X=2

?- member(X, [3]).

;

X=3

Logische Programmierung: Prolog

beispiel append
Beispiel: append

append([], Ys, Ys).

append([X|Xs], YS, [X|Zs]) :- 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

Logische Programmierung: Prolog

beispiel last
Beispiel: last

last([X], X).

last([Y|Ys], X) :- last(Ys, X).

?- last([1,2,3], X).

?- last([2,3], X).

?- last([3], X).

X=3

Alternative: last(List, Last) :- append(_, [Last], List).

Logische Programmierung: Prolog

evaluation arithmetischer ausdr cke
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

Logische Programmierung: Prolog

beispiele21
Beispiele
  • 5 is 2+3 Yes
  • X is 2+3 X=5
  • X is Y+3 Fehler

Unterschied: X = 2+3 Unifikation

Logische Programmierung: Prolog

beispiele22
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

Logische Programmierung: Prolog

built in pr dikat cut
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

Logische Programmierung: Prolog

negation
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(X=3).

Logische Programmierung: Prolog

problem mit built in pr dikaten
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:

?- Y = 2, X is Y+3.

?- X is Y+3, Y = 2.

X = 5

Fehler

X = 1;

X = 2;

X = 4

?- member(X, [1,2,3,4]), not(X=3).

?- not(X=3), member(X, [1,2,3,4]).

No.

Logische Programmierung: Prolog

freeze
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 Y+3)), Y = 2.

X = 5

?- freeze(X, not(X=3)), member(X, [1,2,3,4]).

X = 1;

X = 2;

X = 4

Logische Programmierung: Prolog

n dame problem
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

Logische Programmierung: Prolog

n dame problem28
N-Dame-Problem

queens(N,Qs) :- range(1,N,Ns), permutation(Ns,Qs), safe(Qs).

range(M,N,[M|Ns]) :- M < N, M1 is M+1, range(M1,N,Ns).

range(N,N,[N]).

permutation(Xs,[Z|Zs]) :- select(Z,Xs,Ys), permutation(Ys,Zs).

permutation([],[]).

safe([Q|Qs]) :- safe(Qs), not(attack(Q,Qs)).

safe([]).

attack(X,Xs) :- attack(X,1,Xs).

attack(X,N,[Y|Ys]) :- X is Y+N.

attack(X,N,[Y|Ys]) :- X is Y-N.

attack(X,N,[Y|Ys]) :- N1 is N+1, attack(X,N1,Ys).

Logische Programmierung: Prolog

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

Logische Programmierung: Prolog

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

Logische Programmierung: Prolog

literatur
Literatur

Kowalski, R.: Algorithm = Logic + Control, Communication of the ACM22, 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

Logische Programmierung: Prolog