Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in Prolog Copyright © 1999 by Michael Neumann

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in Prolog Copyright © 1999 by Michael Neumann"—  Präsentation transkript:

1 Einführung in Prolog Copyright © 1999 by Michael Neumann

2 PROLOG PROgramming in LOGic Für was steht PROLOG?

3 Anwendungsgebiete Expertensystem (Diagnosesystem) Relationale Datenbanken mathematische Logik abstrakte Problemlösungen Simulieren des menschlichen Sprachverstehens automatischer Entwurf Lösung von symbolischen Gleichungen Analyse biochemischer Strukturen zahlreiche Gebiete der KI

4 Geschichte der Logischen Programmierung Die Geschichte der Logischen Programmierung ist nicht sehr lang. Die theoretischen Grundlagen wurden in den 70er Jahren erarbeitet. Der erste Prolog-Interpreter wurde 1972 von Alain Colmerauer in Marseilles geschrieben. Erst Anfang der 80er Jahre kamen die ersten kommerziellen Prolog-Interpreter auf den Markt. Durch die Wahl von PROLOG als Sprache der Rechner der 5. Generation bei einem jap. Forschungsprojekt gelang der weltweite Durchbruch.

5 Programmlängen-Vergleich Programmiersprache Fortran Cobol Ada PL/I C Pascal Basic MProlog Programmgröße in Quellseiten

6 Programmierparadigmen

7 1. Imperatives Programmieren Es wird beschrieben, WIE ein bestimmtes Problem gelöst werden soll. Assembler ADA BASIC C / C++ COBOL FORTRAN Java Modula PASCAL Perl PL/1 Simula Smalltalk und viele mehr...

8 2. Funktionales Programmieren Das Programm ist eine Folge von Funktionen. Lisp Logo Haskell ML Hope Scheme Concurrent Clean Erlang NESL Sisal Miranda

9 3. Deklaratives Programmieren Es wird beschrieben, WAS das Problem ist, nicht jedoch wie dieses zu lösen ist. Die Lösung muß der Computer finden. Prolog Goedel Escher Elf Mercury

10 4. Objektorientiertes Programmieren Wird in Verbindung mit den drei vorhergehenden Paradigmen verwendet. Smalltalk Java Eiffel C++ Object Pascal XLISP Haskell andere... Imperativ:Funktional:Deklarativ: Bestimmte Versionen von Prolog und andere... Nahezu alle neuen Programmiersprachen sind objektorientiert!

11 Fakten Regeln Das Prinzip von PROLOG Wissensbasis Fragen bilden Die gestellten Fragen werden aufgrund der Fakten und Regeln (Wissensbasis) durch die Prolog- Interferenzmaschine entweder als beweisbar (yes) oder als nicht beweisbar ausgewertet (no).

12 Fakten Beispiele: die Sonne scheint. es_regnet. wertvoll(gold). männlich(daniel). mag(john,mary). besitzt(john,gold). vater(hans, gabriel). Schreibweise in Prolog: Die Sonne scheint. Es regnet. Gold ist wertvoll. Daniel ist männlich. John mag Mary. John besitzt Gold. Hans ist der Vater von Gabriel. Natürliche Bedeutung:

13 Fakten mag ( john, mary ). Prädikat (Funktor) Argumente Die Reihenfolge von john und mary ist nicht egal, d.h. es ist ein Unterschied ob man mag(john,mary) oder mag(mary,john) schreibt. Ersteres könnte z.B. John mag Mary, das andere Mary mag John bedeuten. Prolog weiß nicht, was ein Fakt bedeutet. Deshalb muß man selber festlegen was z.B. mag(john,mary) bedeutet. Ein Fakt kann beliebig viele Argumente haben. Ein Fakt muß mit einem Punkt beendet werden. Ein Fakt muß mit einem Kleinbuchstabe oder beginnen. Anzahl d. Argumente = Stelligkeit

14 Fakten Ein Beispiel: besitzt(john, gold). besitzt(john, buch). mag(john, mary). mag(joe, fisch). eingegebene Fakten:Fragen an den Prolog-Interpreters: ?- besitzt(john,gold). yes ?- mag(joe, fleisch). no Um die Frage besitzt(john,gold) beantworten zu können, durchsucht Prolog die Wissensbasis von oben nach unten nach einem passenden Fakt, und wird in der 1. Zeile fündig. Darum antwortet Prolog mit yes was so viel wie bewiesen bedeutet. Auf die Frage mag(joe,fleisch) antwortet Prolog mit no, was nicht beweisbar bedeutet, da es keinen passenden Fakt finden kann.

15 Variablen besitzt(john, gold). besitzt(john, buch). mag(john, mary). mag(joe, fisch). Wissensbasis: Um festzustellen, was John besitzt, kann man die Frage besitzt(john,X) stellen. X ist dabei eine Variable. Prolog antwortet dabei mit folgendem: X = gold X = buch Variablen beginnen mit einem Großbuchstaben oder Unterstrich. _ ist eine anonyme Variable. Bei dem Beispiel oben, würde _ anstatt X folgendes bedeuten: Besitzt John etwas? (Antwort: yes).

16 Regeln Beispiel: Mary mag jeden, der Wein mag.mag(mary,X) :- mag(X,wein). Regeln drücken die Abhängigkeit eines Faktums von einem oder mehreren anderen Fakten aus. bruder(X,Y) :- männlich(X), eltern(X,A,B), eltern(Y,A,B). X ist der Bruder von Y. X ist dann der Bruder von Y, wenn X männlich ist und X und Y die gleichen Eltern A und B haben. Beispiel:

17 Regeln Die linke Seite (vor :- ) ist wahr, wenn die rechte Seite bewiesen werden kann. Ein Komma zwischen zwei Fakten auf der rechten Seite entspricht einer logischen UND-Verknüpfung. Ein Semikolon entspricht einer ODER-Verknüpfung. Es kann geklammert werden. Die UND- bzw. ODER-Verknüpfungen können auch bei Fragen angewendet werden. Mit not kann verneint werden. Die Regeln werden auch Horn-Klauseln genannt.

18 Arithmetik Beispiel: Berechnen der Fakultät fak(0,1). fak(N,X) :-N > 0, M is N - 1, fak(M,Y), X is N * Y. ?- fak(0,N). N = 1 FUNCTION fak(N : Integer) : Integer; BEGIN IF N = 0 THEN fak := 1 ELSE IF N > 0 THEN fak := N * fak(N-1); END; Aufruf: ?- fak(6,N). N = 720

19 Arithmetik Beispiel: Berechnen der Fibonacci Folge fib(0,1). fib(1,1). fib(N,X) :- N1 is N - 1, N2 is N - 2, fib(N1,X1), fib(N2,X2), X is X1 + X2. ?- fib(11,N). N = 144 Aufruf: ?- fib(4,N). N = 5

20 Arithmetik + - * / Addition, Subtraktion, Multiplikation, Division modModulo // ^Gleitzahl-Division, Potenzierung ( )Priorität isZuweisen eines arith. Ausdruckes > = !) =:=gleich (arithmetisch) =\=ungleich (arithmetisch) Infix: (4 + 1)*4 Postfix: *(4,+(4,1))

21 Elemente von Prolog 1. Atome: Atome fangen mit einem Kleinbuchstaben an oder bestehen aus Sonderzeichen. In eingeschlossene Zeichen oder Buchstaben sind auch Atome. Beispiele für Atome: blah123 --> Hallo 2. Variablen: Variablen beginnen mit einem Großbuchstaben oder einem Unterstricht. Beispiele für Variablen: Blah123 _123_hundert 3. Integer-Konstanten: z.B.:

22 Listen Listen werden durch eckige Klammern definiert. Listen können Elemente mit unterschiedlichen Typen aufnehmen. [ 1,2,3,4,5 ] [1 | [2 | [3 | [4]]]] [ vater, Hallo, 1, 3, mag(john,mary) ] [ 1, [2,3,4], 5]verschachtelte Liste [] leere Liste [ Head | Tail ] = [ 1,2,3,4 ] Head = 1 Tail = [ 2,3,4 ] [ X, Y, Z ] = [ 1, 2, 3] X = 1 Y = 2 Z = 3 Unifizierung (Pattern-Matching)

23 Listen Bestimmen der Länge einer Liste: list_length( [], 0 ). list_length( [H | T], N ) :- list_length(T,M), N is M + 1. Zählen eines Elements einer Liste: count_element( [], Element, 0). count_element( [H|T], Element, Anzahl) :- H = Element, count_element(T, Element, X), Anzahl is X + 1. count_element( [H|T], Element, Anzahl) :- count_element(T, Element, Anzahl). Prüfen ob Element in Liste vorhanden ist: member(E, [E|T]). member(E, [H|T) :- member(E,T).

24 Listen Zwei Listen verknüpfen: concat([], L, L). concat([H|T], L, [H|NeueListe] ) :- concat(T,L,NeueListe). Eine in eingeschlossene Zeichenkette, ist eine Liste aus Zeichen, ein String.

25 Strukturen zeitpunkt(datum(16,5,1999),uhrzeit(18,30)). (Zusammengesetzte Terme) buch( autor(clocksin,mellish), titel(Programmieren in PROLOG) ). cd( band(metallica), titel(Load), dauer(67) ). cd( band(metallica), titel(Reload), dauer(72) ). ?- cd( band(metallica), titel(X), _ ). Gibt alle Titel von Metallica aus. zeitpunkt(16,5,1999,18,30). buch( clocksin, mellsih, Programmieren in PROLOG ).

26 Beispiel für Backtracking maennlich( john ). maennlich( george ). ist_vater_von( george, mary ). ist_vater_von( george, john ). ist_vater_von( harry, sue ). ist_vater_von( edward, george ). ist_sohn_von(X,Y) :- ist_vater_von(Y,X), maennlich(X). ?- ist_sohn_von(X,Y). X = john Y = george X = george Y = edward Wenn ein Ziel (Goal) nicht erfüllt werden kann, dann wird der Fakt links neben dem Gescheitertem nach einem alternativen Ausgang geprüft.

27 SWI-Prolog % ist ein Zeilenkommentar Starten einer Wissensbasis: Doppelklick auf Datei, oder consult(DATEI). im Interpreter eingeben, wobei DATEI z.B. für C:/Prolog/x.pl steht oder wenn x.pl geladen werden soll und sich im Standardverzeichnis befinden, dann reicht consult(x). Mit halt. wird der Interpreter beendet. Bei mehreren möglichen Ausgängen (siehe letzte Seite), wird nach jeder Ausgabe gewartet. Drücke ; (Semikolon) wenn der nächste Ausgang angezeigt werden soll, oder RETURN wenn nichts weiter angezeigt werden soll.

28 SWI-Prolog read(X).Liest von der Tastatur (oder Datei) in X write(X).Schreibt X auf den Bildschirm (oder Datei). get(Ascii).Liest Zeichen von Tastatur (Datei) in Ascii. put(Ascii).Schreibt Zeichen Ascii auf Bildschirm (Datei). nl.Neue Zeile. tab(N).Schreibt N Leerzeichen. tell(DATEI).Öffnet Datei (überschreiben, erstellen). told(DATEI).Schließt Datei. append(DATEI).Öffnet Datei zum anhängen von Daten. trueimmer beweisbar failnicht beweisbar

29 Programmbeispiele für funktionale Sprachen

30 fun iter (a,b) = if a <= b then (print(Int.toString(a*a)^" "); iter(a+1,b) ) else print "\n"; iter(1,10); fun iter 0 = "" | iter n = (iter(n-1); print(Int.toString(n*n)^" "); "\n"); print(iter 10);

31 (print "Hello World") (let ( (a 0) ) (while (< a 20) (princ a) (princ " ") (setq a (+ a 1)) )

32 Ende Homepage Copyright © 1999 by Michael Neumann


Herunterladen ppt "Einführung in Prolog Copyright © 1999 by Michael Neumann"

Ähnliche Präsentationen


Google-Anzeigen