Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in Prolog Copyright © 1999 by Michael Neumann (neumann@s-direktnet.de)

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in Prolog Copyright © 1999 by Michael Neumann (neumann@s-direktnet.de)"—  Präsentation transkript:

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

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

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 36 25 24 22 20 19 9

6 Programmierparadigmen
4 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. Imperativ: Funktional: Deklarativ: Smalltalk Java Eiffel C++ Object Pascal XLISP Haskell andere... Bestimmte Versionen von Prolog und andere... Nahezu alle neuen Programmiersprachen sind objektorientiert!

11 Das Prinzip von PROLOG Fakten Regeln 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). Fragen

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

13 Fakten 2 mag ( john, mary ) . Argumente Prädikat (Funktor)
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. mag ( john, mary ) . Argumente Prolog weiß nicht, was ein Fakt bedeutet. Deshalb muß man selber festlegen was z.B. mag(john,mary) bedeutet. Prädikat (Funktor) Anzahl d. Argumente = Stelligkeit Ein Fakt kann beliebig viele Argumente haben. Ein Fakt muß mit einem Punkt beendet werden. Ein Fakt muß mit einem Kleinbuchstabe oder ‘ beginnen.

14 Fakten 3 Ein Beispiel: besitzt(john, gold). besitzt(john, buch).
eingegebene Fakten: Fragen an den Prolog-Interpreters: besitzt(john, gold). besitzt(john, buch). mag(john, mary). mag(joe, fisch). ?- 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).
Wissensbasis: besitzt(john, gold). besitzt(john, buch). mag(john, mary). mag(joe, fisch). 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 _ ist eine anonyme Variable. Bei dem Beispiel oben, würde _ anstatt X folgendes bedeuten: Besitzt John etwas? (Antwort: yes). Variablen beginnen mit einem Großbuchstaben oder Unterstrich .

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

17 Regeln 2 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 1 Beispiel: Berechnen der Fakultät fak(0,1). fak(N,X) :- N > 0, M is N - 1, fak(M,Y), X is N * Y. FUNCTION fak(N : Integer) : Integer; BEGIN IF N = 0 THEN fak := 1 ELSE IF N > 0 THEN fak := N * fak(N-1); END; Pascal Aufruf: ?- fak(0,N). N = 1 ?- fak(6,N). N = 720

19 Arithmetik 2 fib(0,1). fib(1,1).
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. Aufruf: ?- fib(11,N). N = 144 ?- fib(4,N). N = 5

20 Arithmetik 3 + - * / Addition, Subtraktion, Multiplikation, Division
mod Modulo // ^ Gleitzahl-Division, Potenzierung ( ) Priorität is Zuweisen eines arith. Ausdruckes > < größer, kleiner => =< größer gleich, kleiner gleich (zuerst = dann > !) =:= 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: blah > ‘Hallo‘ 2. Variablen: Variablen beginnen mit einem Großbuchstaben oder einem Unterstricht. Beispiele für Variablen: Blah _123_hundert 3. Integer-Konstanten: z.B.:

22 Listen 1 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 2 list_length( [], 0 ).
Bestimmen der Länge einer Liste: list_length( [], 0 ). list_length( [H | T], N ) :- list_length(T,M), N is M + 1. Prüfen ob Element in Liste vorhanden ist: member(E, [E|T]). member(E, [H|T) :- member(E,T). 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(T, Element, Anzahl).

24 Listen 3 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 (Zusammengesetzte Terme)
zeitpunkt(datum(16,5,1999),uhrzeit(18,30)). zeitpunkt(16,5,1999,18,30). buch( autor(clocksin,mellish), titel(‘Programmieren in PROLOG‘) ). buch( clocksin, mellsih, ‘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.

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 1 % 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 2 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. true immer beweisbar fail nicht 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); ML

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

32 Copyright © 1999 by Michael Neumann
Ende Homepage Copyright © 1999 by Michael Neumann


Herunterladen ppt "Einführung in Prolog Copyright © 1999 by Michael Neumann (neumann@s-direktnet.de)"

Ähnliche Präsentationen


Google-Anzeigen