Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe...

29
Einführung in PROLOG Christian Stocker

Transcript of Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe...

Page 1: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Einführung in PROLOG

Christian Stocker

Page 2: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Inhalt

● Was ist PROLOG?● Der PROLOG-

Interpreter– Welcher Interpreter?– SWI-Prolog

● Syntax– Einführung– Fakten, Regeln,

Anfragen– Operatoren– Rekursion– Listen– Cut

● Funktionsweise– So arbeitet Prolog– Warrens Abstrakte

Maschine● Codebeispiele● Zusammenfassung

Page 3: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Was ist PROLOG? (1)

● PROLOG = Programming in Logic● 1972 von Alain Colmerauer entwickelt● Keine prozedurale Programmiersprache

sondern eine deklarative mit prozeduralen Elementen

● Nichtlineares Programmieren wird betrieben● „Maschinensprache des Logikprozessors“● Prolog wird Interpretiert● Interpreter erstmals in LISP programmiert

Page 4: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Was ist PROLOG? (2)

● Prolog-Programm besteht nur aus Datenbasis

● Es wird beschrieben, WAS das Problem ist, nicht jedoch wie dieses zu lösen ist

● Arbeitet auf Prädikatenlogik● Prolog-Programm ist Sammlung von

Hornklauseln

Page 5: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Der PROLOG-Interpreter(1)

● SWI-Prolog– Wird hier für Beispiele benützt– Für Windows, Linux und MacOS verfügbar– www.swi-prolog.org

● Gnu-Prolog– Für Constraint Programming besser geeignet– Für Windows und Linux verfügbar– http://pauillac.inria.fr/~diaz/gnu-prolog/

● Qu-Prolog● Minerva● SICStus Prolog

Page 6: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

SWI-Prolog(1)

● Leistungsfähiger Prolog-Interpreter● Entwickelt auf Uni Amsterdam● Freeware● Sehr große Bibliothek● Installationen für Windows, Linux und

MacOS verfügbar● Integrierter Debugger● Basiert auf einer eingeschränkten Version

der Warren Abstract Machine

Page 7: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

SWI-Prolog(2)

● Start auf Shell mit pl● Prolog-Files mit Texteditor schreiben● Programm im Interpreter öffnen:[name]. Oder consult(name).

● Anfrage aus Interpreter stellen● Interpreter beenden:halt.

● Hilfe mit help(Topic) oder apropos(Topic)

Page 8: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax

● Einführung● Fakten, Regeln, Anfragen● Operatoren● Rekursion● Listen● Cut

Page 9: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/Einführung

● Prolog Statements werden immer mit Punkt (.) abgeschlossen

● Prädikate und Konstanten werden klein geschrieben

● Variablen beginnen mit Großbuchstaben● Unterscheidung zwischen

– Fakten– Regeln– Anfragen

● Einzeilige Kommentare: % <Comment>● Mehrzeilige: /* <Comment> */

Page 10: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/ Fakten, Regeln, Anfragen

● Fakten– Beispiel: „John ist männlich“:maennlich(john).

– Beispiel: „John mag Mary“:mag(john,mary).

– Ein Fakt besteht aus einem Prädikat und dessen Argumenten. Die Anzahl der Argumente beschreibt die Stelligkeit

– Ein Fakt kann beliebig viele Argumente haben– Ein Fakt muss immer mit einem Kleinbuchstabe

beginnen

Page 11: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/ Fakten, Regeln, Anfragen

● Regeln– Regeln drücken die Abhängigkeit eines Faktums

von einem oder mehreren anderen Fakten aus– Bsp: „Mary mag jeden, der Wein mag“mag(mary,X) :- mag(X,wein).

– :- kann als umgedrehter Implikationspfeil gelesen werden

– Die linke Seite ist wahr, wenn die rechte Seite bewiesen werden kann

– X ist eine Variable, mary und wein sind Konstanten

Page 12: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/ Fakten, Regeln, Anfragen

● Regeln– Ein Komma zwischen zwei Fakten auf der

rechten Seite entspricht einer logischen UND Verknüpfung

– Ein Semikolon entspricht einem logischen ODER– Bsp: eltern(X,Y) :- vater(X,Y); mutter(X,Y).opa(X,Y) :- vater (X,Z), vater(Z,Y).

– Mit not kann eine Klausel verneint werdenmann(X) :- not frau(X).

– Regeln müssen als Hornklauseln formuliert werden.

Page 13: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/ Fakten, Regeln, Anfragen

● Anfragen– Anfragen werden im Prolog-Interpreter gestellt– Beispiel: „Ist John männlich?“?- maennlich(john).

– Interpreter antwortet mit yes, wenn dies Beweisbar ist.

– Beispiel: „Wen mag Mary?“?- mag(mary,X).Interpreter antwortet mit X=john

– Falls es mehrere Antworten gibt, kann mit 'n' die nächste Antwort angesehen werden.

Page 14: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/ Fakten, Regeln, Anfragen

● Anfragen– Analog zu den Regeln können auch hier logische

Verknüpfungen angewandt werden.– '_' steht für ein leeres Argument. Hier ist es

sozusagen egal, was an dieser Stelle gilt.– Beispiel: „Wer mag alles irgendjemanden?“?- mag(X,_).

Page 15: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/Operatoren

● :- Regeloperator● == Gleichheitsoperator● =:= Gleichheitsoperator für Zahlenwerte● \= Ungleichungsoperator● >= Größer/Gleich● =< Kleiner/Gleich● is Zuweisungsoperator für Zahlenwerte● not Verneinung für Klauseln● * / + - Rechenoperationen

Page 16: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/Rekursion

● Ohne Rekursion– grosselter(X,Y):- elter(X,Z), elter(Z,Y).

– urgrosselter(X,Y):- elter(X,Z), grosselter(Z,Y).

– ururgrosselter(X,Y):- elter(X,Z), urgrosselter(Z,Y).

– urururgrosselter(X,Y):- elter(X,Z),ururgrosselter(Z,Y).

Page 17: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/Rekursion

● Mit Rekursion– vorfahr(X,Y) :- elter(X,Y).vorfahr(X,Y) :- elter(X,Z), vorfahr(Z,Y).

● Rekursion in Prolog analog zu anderen bekannten Programmiersprachen

Page 18: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/Listen

● Listen werden durch eckige Klammern definiert. Listen können Elemente mit unterschiedlichen Typen aufnehmen.

● Beispiele:– [1,2,3,4,5]– [1,2,3,[4,5]]– [hugo,'Hallo',4,5,mag(john,mary)]– [] leere Liste– [Head|Tail] = [1,2,3,4]

Head=1Tail=[2,3,4]

Page 19: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/Listen

● Bestimmen der Länge einer Listelist_length([],0).list_length([H|T],N) :- list_length(T,M),N is M+1.

● Prüfen, ob Element in Liste vorhandenmember(E,[E|T]).member(E,[H,T] :- member(E,T).

● Listen anhängenappend([1,2,3],[4,5],Target).

Page 20: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Syntax/Cut

● Beispiel:loesung(X):-zahl(X),X =:= 2*X-4.zahl(1).zahl(N) :- zahl(M), N is M+1.

● Problem: Programm findet zwar Lösung X=4 aber es termiert nicht.

● Lösung:loesung(X):-zahl(X),X=:= 2*X-4,!.

● Cut verhindert weiteres Backtracking nach gefundener Lösung

Page 21: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Funktionsweise

● So arbeitet PROLOG● Warrens Abstrakte Maschine

Page 22: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

So arbeitet PROLOG

● PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis.

● Eine Variable kann mit jeder Konstante matchen.

● Werden mehrere Ziele benötigt, versucht Prolog erst das erste und schaut, ob das nächste Ziel erfüllt werden kann, ansonsten kommt es zum Backtracking.

● Bsp: ?- elter(daisy,X), maennl(X).Trifft maennl(X) nicht zu, wird X zurückgesetzt und neu belegt.

Page 23: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Warren's abstrakte Maschine

● Prolog wird in einen Zwischencode (ähnl. Java, managed .NET) übersetzt. Dieser Zwischencode wird von der WAM interpretiert und ausgeführt.

● Die WAM ist eine Virtuelle Machine. Es ist somit möglich WAM Code auf jeder Hardware zu betreiben.

● In SWI-Prolog arbeitet eine sehr eingeschränkte WAM.

● Literatur: Warren's Abstract Machine -a tutorial reconstruction

Page 24: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Beispiele

● Ein Familienstammbaum● Einfärben von Flächen● Ein mathematisches Rätsel

Page 25: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Ein Familienstammbaum

Page 26: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Einfärben von Flächen

1 2

4 3Farben rot, blau, gelb für Einfärbung verfügbar

Page 27: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Ein mathematisches Rätsel

ABB - CD = EED- - *

FD + EF = CF= = =

EGD * FH = ???

Page 28: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Zusammenfassung

● Was ist PROLOG?● Der PROLOG-

Interpreter– Welcher Interpreter?– SWI-Prolog

● Syntax– Einführung– Fakten, Regeln,

Anfragen– Operatoren– Rekursion– Listen– Cut

● Funktionsweise– So arbeitet Prolog– Warrens Abstrakte

Maschine● Codebeispiele

Page 29: Einführung in PROLOG - hs-weingarten.deSo arbeitet PROLOG PROLOG vergleicht eine Anfrage der Reihe nach mit den Fakten aus der Datenbasis. Eine Variable kann mit jeder Konstante matchen.

Ende

Unterlagen zum Vortrag auf/pub/stud/stud/stockerc/prolog/

[email protected]

(C)2006 Christian Stocker