Einführung in PROLOG StD G. Noll f ( x ) f ( ) g ( ) g ( x ) barbara

Slides:



Advertisements
Ähnliche Präsentationen
Programmieren in Logik
Advertisements

Deduktive Datenbanken
Projekt 5 Prolog - Programmieren mit Logik
Einführung in Prolog Copyright © 1999 by Michael Neumann
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Frame-Logik Eine Einführung Andreas Glausch.
Zusammenfassung der Vorwoche
B-Bäume.
2. Programmstruktur – Teil 2
Künstlichen Intelligenz
Default Logiken Zhao Li
10. Grundlagen imperativer Programmiersprachen
Listen [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[], dead(zed), [2,
Puck eine visuelle Programmiersprache für die Schule
Syntax der Aussagenlogik
SAP R/3 - Speichermanagement
Verifizieren versus Berechnen
Training IT-Grundlagen Interaktive Web-Seiten (HTML-Forms, CGI, Servlets) - Prof. Dr. Böttcher - S. cgi/ 1 Prolog als Datenbanksprache.
Standortfaktoren INTERN - Ausdrucksstark präsentieren.
Listen & Beweisstrategie
Rekursive Listenverarbeitung
Cut, Negation, Manipulation der Datenbasis
Prolog und Prädikatenlogik I
Der Einstieg in das Programmieren
Java: Objektorientierte Programmierung
Java: Grundlagen der Objektorientierung
Logische Programmierung: Prolog
Anfragesprachen – Dipl. Ing. Ulrich Borchert / FH Merseburg1/7 Datenbanken werden als Anhäufung von Werten eines Wertebereiches aufgefasst und Datenbankabfragen.
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
Algorithmentheorie 04 –Hashing
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Tricks mit Zahlen. Kapitel 2 © Beutelspacher Mai 2004 Seite 2 Idee / Aufgaben In jeder Woche stelle ich Ihnen einen Zaubertrick mit Zahlen vor. Ihre Aufgaben:
Datenbankentwurf mit Hilfe des ER-Modells entwickeln
Grundkurs Theoretische Informatik, Folie 3.1 © 2004 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 3 Gottfried Vossen Kurt-Ulrich Witt.
Semantik von Prolog & Unifikation
Syntax von Prolog & Familiendatenbasis
Fakten, Regeln und Anfragen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Beispiele für Ausdrucksalgebren
Grammatik als Deduktionssystem
PROLOG Die Rose ist rot. Die Tulpe ist gelb. Die Nelke ist weiss.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Vorlesung 3: Verschiedenes Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Günter Kniesel Advanced Prolog. 2 Bisher: Grundlagen Klauseln –Regeln –Fakten Terme –Die einzige Datenstruktur in Prolog –Listen als Sonderfall mit eigener.
DVG Klassen und Objekte
Heute: Scherenzange zeichnen
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
Internet: Funktionsweise und Dienste
§3 Allgemeine lineare Gleichungssysteme
Auslegung eines Vorschubantriebes
Ganzheitliches Projekt-, Ressourcen- und Qualitätsmanagement 1 Reports und AddOns Auf den folgenden Seiten wird Ihnen die Funktionsweise der Reports und.
SQL - Structured Query Language AIFB SS (1/9) Join-Operationen in SQL-92(1/9) Syntax einer Join-Operation: join-op := CROSS JOIN | [NATURAL]
Dieser nicht Fehler finden Algorithmus enthält einfach einen gravierenden welcher zu ist.
Analyseprodukte numerischer Modelle
Meldungen über Ethernet mit FINS/UDP
Logische Programmierung mit PROLOG
Arne Vater Wintersemester 2006/ Vorlesung
Der Erotik Kalender 2005.
11. Wissenbasis und Regelsysteme Sebastian Linek.
1 Tagesüberblick 4 Lösung Hausaufgabe/Fragen Mustervergleiche.
Einführung in die logische Programmierung mit PROLOG
7. Formale Sprachen und Grammatiken
1 Tagesüberblick 5 Lösung Hausaufgabe/Fragen Assoziative Felder Funktionen zu Variablenbehandlung.
Semantic Web.
Einführung Dateisystem <-> Datenbanksystem
Grammatik als Deduktionssystem Theorie, Grammatik, Grammatiktheorie Grammatik Sprache Hypothese Sprachtheorie Theorie Erklärung Theoretisches Konstrukt.
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
Datentypen: integer, char, string, boolean
 Präsentation transkript:

Einführung in PROLOG StD G. Noll f ( x ) f ( ) g ( ) g ( x ) barbara Referat zur Veranstaltung „Informatik VI“ (18.635) StD G. Noll Rhein Gymnasium Sinzig Februar 2001 f ( x ) f ( ) g ( ) g ( x ) sterblich(A) :- mensch(A). mensch(x). barbara

Logik Aristoteles: Syllogismen (~ 330 v. Chr.) Gottlob Frege: Begriffsschrift (1879) Bertrand Russel, Alfred North Whitehead Principia Mathematica (1910) Colmerauer e.a. System-Q (1971)

PROLOG PROgrammieren in LOGik Anfang der 70er Jahre in Edinburgh von Kowalski und van Emden entwickelt in Marseille von Colmerauer zum ersten Mal implementiert in der Mitte der 80er Jahre weltweiter Durchbruch als Sprache der KI und bei der Entwicklung von Expertensystemen heute hat das Interesse an PROLOG nachgelassen

Vorteile für die Schule überschaubare Syntax interaktive Programmerstellung deklaratives Programmieren als Gegenstück zum imperativen Konzept kostenlose (gepflegte) PROLOG-Implementationen im Internet SWI-Prolog www.swi.psy.uva.nl/projects/SWI-Prolog/ Strawberry Prolog www.dobrev.com/ Visual Prolog www.visual-prolog.com/

PROLOG-Programm Programmieren in PROLOG bedeutet das Erstellen einer Wissensbasis die Formulierung intelligenter Anfragen PROLOG - Programm Wissensbasis Anfrage

Wissensbasis Wissen ist die Fähigkeit zur sachgerechten Interpretation von Daten Daten führen über eine Interpretation zur Information Daten werden für PROLOG in einer Wissensbasis gespeichert

PROLOG - System Eingabe von Daten Anfrage Antworten Fakten Wissensbasis Fakten Regeln Benutzerin Benutzer Anfrage Suchstrategien Inferenzmaschine Logik Antworten

Klauseln Faktum Regel Fakten Eigenschaften von Objekten oder Beziehungen zwischen ihnen Regeln „wenn-dann“ Aussagen

Fakten Mit Fakten stellt man Konstanten, Eigenschaften von Objekten oder Beziehungen zwischen Objekten dar sonnig. frau(elisabeth). mutter(elisabeth,gregor). Fakten bestehen aus einem Klauselkopf, d. h. einem Funktor mit keinem, einem oder mehreren Argumenten

Regeln Mit Regeln beschreibt man „wenn-dann“ Aussagen ( d. h. bedingte Beziehungen) zwischen Objekten Sie bestehen aus einem (Klausel-) Kopf und einem Körper mit Termen (Zielen) frau(X) :- mutter(X,_). Der Körper beschreibt eine Folge von Voraussetzungen, aus deren Gültigkeit auf die Gültigkeit des Kopfes geschlossen wird

Terme Im Körper einer Regel können als Terme auftreten: Klauselköpfe frau(X) :- mutter(X,_). Operationen old(X) :- X > 80. Systemprozeduraufrufe out(X) :- write(X), nl.

Termverknüpfungen opa(O,E) :- vater(O,V), vater(V,E). Terme im Regelkörper lassen sich logisch miteinander verbinden: ein Komma , steht für UND ein Semikolon ; für ODER Die ODER-Verknüpfung wird selten verwendet. Stattdessen fügt man eine weitere Regel hinzu. opa(O,E) :- vater(O,V), vater(V,E). opa(O,E) :- vater(O,M), mutter(M,E).

Prädikate Klauseln werden identifiziert über ihren eindeutigen Bezeichner, den Funktor, und ihre Stelligkeit. mutter(claudia). mutter/1 mutter(else,pia). mutter/2 Alle Klauseln mit gleichem Funktor und gleicher Stelligkeit bilden ein Prädikat

Syntax Bezeichner werden aus Buchstaben, Ziffern und Unterstrich gebildet Bezeichner für Funktoren beginnen mit einem Kleinbuchstaben Bezeichner für Konstanten beginnen mit einem Kleinbuchstaben Bezeichner für Variable beginnen mit einem Großbuchstaben der Unterstrich _ bezeichnet eine anonyme Variable Klauseln und Abfragen enden mit einem Punkt . Kommentare stehen zwischen /* und */

Anfragen Erkenntnisse aus einer Datenbasis gewinnen wir durch Anfragen. Diese werden interaktiv an das System als Ziele (goals) in Form von Klauselköpfen gestellt: ?- mutter(claudia). Antwort: yes ?- mutter(M,pia). Antwort: M=else more (y/n)?

Übung 1 Geben Sie in das PROLOG-System folgende Daten ein: vater(egon,hans). /* vater(Vater,Kind) */ vater(hans,fritz). vater(emil,maria). mutter(maria,fritz). /* mutter(Mutter,Kind) */ Definieren Sie eine Regel für opa(Opa,Enkelkind) und stellen Sie geeignete Anfragen, u.a. nach dem Opa von Fritz Untersuchen Sie, was passiert, wenn Sie die Reihenfolge der Klauseln im Programm ändern Wie findet PROLOG die Antworten auf Ihre Anfragen

Semantik PROLOG besitzt neben der deklarativen Semantik auch eine prozedurale. deklarativ logische Bedeutung des Programms prozedural Abarbeitung des Programms Anfragen werden mit Hilfe der Klauseln solange auf einfachere Aussagen zurückgeführt, bis diese Fakten des Programms sind. Dies leistet die Inferenzmaschine.

Matching Das Systems geht auf die Suche nach einer passenden Klausel Eine Klausel passt zu einem Ziel („matched“), wenn der Klauselkopf mit dem Ziel unifiziert („verschmilzt“): Klausel und Ziel haben den gleichen Namen und gleiche Stelligkeit die Parameter passen zueinander, d. h. sie sind entweder identisch oder mindestens ein Parameter ist eine Variable Im Prozess der Unifikation werden die Variablen an die Parameter des anderen Ausdrucks gebunden: sie werden instantiiert (instanziert) oder gleichgesetzt

Backtracking Der Suchprozess nach einer passenden Klausel kann in Sackgassen gelangen: eine ausgewählte passende Klausel führt nicht zum Ziel, so dass später eine alternative, ebenfalls passende Klausel versucht werden muss Ein damit verbundenes Zurücksetzen auf einen früheren Zustand im Suchprozess wird Backtracking genannt Die Rückkehr ist verbunden mit der Freigabe aller Variablenbindungen, die seit dem ersten Anlauf des früheren Zustandes vorgenommen wurden

UND-ODER-Baum An der Wurzel steht der Funktor des Prädikats, das mit der Anfrage matched. Die Nachfolgeknoten enthalten die Klauseln des Prädikates Bei Regeln bilden die Klauseln des Rumpfes die Nachfolgeknoten UND-Verknüpfungen von Klauseln werden mit einem Winkelbogen dargestellt.

opa(Opa,fritz). Ident: O=Opa Inst: E=fritz V=fritz V=hans E=fritz opa(O,E) opa(O,E) V=fritz E=fritz V=hans E=fritz vater(O,V) vater(V,E) vater(O,M) mutter(M,E) vater(egon,hans) vater(egon,hans) vater(egon,hans) mutter(maria,fritz) vater (hans,fritz) vater (hans,fritz) vater (hans,fritz) Inst: O=egon Inst: V=hans vater(emil,maria) Opa = egon vater(emil,maria) vater(emil,maria) Inst: O=hans Inst: V=fritz

opa(Opa,fritz). Ident: O=Opa Inst: E=fritz V=fritz E=fritz V=maria opa(O,E) opa(O,E) V=fritz E=fritz V=maria E=fritz vater(O,V) vater(V,E) vater(O,M) mutter(M,E) vater(egon,hans) vater(egon,hans) vater(egon,hans) mutter(maria,fritz) vater (hans,fritz) vater (hans,fritz) vater (hans,fritz) vater(emil,maria) vater(emil,maria) vater(emil,maria) Inst: O=hans Inst: V=fritz Inst: O=hans Inst: V=maria

opa(Opa,fritz). Ident: O=Opa Ident: O=Opa Inst: E=fritz Inst: E=fritz opa(O,E) opa(O,E) V=maria E=fritz vater(O,V) vater(V,E) vater(O,M) mutter(M,E) vater(egon,hans) vater(egon,hans) vater(egon,hans) mutter(maria,fritz) vater (hans,fritz) vater (hans,fritz) vater (hans,fritz) vater(emil,maria) vater(emil,maria) vater(emil,maria) Inst: O=hans Inst: V=maria

opa(Opa,fritz). Ident: O=Opa Inst: E=fritz M=fritz E=fritz M=hans opa(O,E) opa(O,E) M=fritz E=fritz M=hans E=fritz vater(O,V) vater(V,E) vater(O,M) mutter(M,E) vater(egon,hans) vater(egon,hans) vater(egon,hans) mutter(maria,fritz) vater (hans,fritz) vater (hans,fritz) vater (hans,fritz) vater(emil,maria) vater(emil,maria) vater(emil,maria) Inst: O=egon Inst: M=hans Inst: O=hans Inst: M=fritz

opa(Opa,fritz). Ident: O=Opa Inst: E=fritz M=maria M=fritz E=fritz opa(O,E) opa(O,E) M=fritz E=fritz M=maria E=fritz vater(O,V) vater(V,E) vater(O,M) mutter(M,E) vater(egon,hans) vater(egon,hans) vater(egon,hans) mutter(maria,fritz) vater (hans,fritz) vater (hans,fritz) vater (hans,fritz) vater(emil,maria) vater(emil,maria) vater(emil,maria) Inst: O=emil Inst: M=maria Inst: O=hans Inst: M=fritz

opa(Opa,fritz). Ident: O=Opa Inst: E=fritz M=maria E=fritz Opa = emil opa(O,E) opa(O,E) M=maria E=fritz vater(O,V) vater(V,E) vater(O,M) mutter(M,E) Opa = emil vater(egon,hans) vater(egon,hans) vater(egon,hans) mutter(maria,fritz) vater (hans,fritz) vater (hans,fritz) vater (hans,fritz) vater(emil,maria) vater(emil,maria) vater(emil,maria) Inst: O=emil Inst: M=maria

Trace Einem Trace liegt das Vier-Port-Boxmodell zugrunde call Klausel, die dem Ziel entspricht call exit redo fail call das Ziel wird das erste Mal aufgerufen exit das Ziel ist erfolgreich abgearbeitet worden redo nach erfolgreicher Abarbeitung wird das Ziel zu einem späteren Zeitpunkt nochmals über Backtracking aktiviert fail der Versuch das Ziel zu beweisen scheitert

fixPROLOG Trace Die Trace-Implementation von fixPROLOG entspricht leider nicht dem Standard ?- opa(Opa,fritz). CALL: opa(Opa_1,fritz) COMP: opa(O_2,E_2) :- vater(O_2,V_2) , vater(V_2,E_2) IDEN: O_2 <-- Opa_1 INST: E_2 <-- fritz CALL: vater(O_2,V_2) COMP: vater(egon,hans) INST: Opa_1 <-- egon INST: V_2 <-- hans EXIT: vater(egon,hans) CALL: vater(hans,fritz) COMP: vater(egon,hans) FAIL: vater(hans,fritz) REDO: vater(hans,fritz) COMP: vater(hans,fritz) EXIT: vater(hans,fritz)   Opa = egon

Übung 2 Bearbeiten Sie die Arbeitsanweisungen des Kapitels 4.4 der Handreichung „Wissensverarbeitung mit PROLOG“ Verwenden Sie auch die Möglichkeit, die Arbeit der Inferenzmaschine mit einem Trace zu verfolgen.

Rekursion Eine besondere Stärke erfährt PROLOG durch die Möglichkeit, eine Beziehung durch Rückgriff auf sich selbst definieren zu können. In der Wissenbasis sei das Ergebnis eines kleinen Wettlaufs erfasst. Dabei besagt das Prädikat vor/2 beim Faktum vor(L1,L2). , dass L1 unmittelbar vor L2 ins Ziel kommt. vor(lisa,tom). vor(tom,elke). vor(elke,karl). vor(karl,petra). vor(petra,ria). vor(ria,mario). Wir wollen ein Prädikat besser/2 definieren mit folgender Bedeutung besser(L1,L2). /* L1 hat eine bessere Zeit als L2 */

besser/2 besser(L1,L2) :- vor(L1,L2). Ein erster Ansatz wäre besser(L1,L2) :- vor(L1,L2). L1 braucht aber nicht unmittelbar vor L2 ins Ziel zu kommen, um eine bessere Zeit zu haben, deshalb wären besser(L1,L2) :- vor(L1,L3),vor(L3,L2). oder besser(L1,L2) :- vor(L1,L3),vor(L3,L4),vor(L4,L2). usw. ebenfalls mögliche Klauseln.

besser/2 besser(L1,L2) :- vor(L1,L3), besser (L3,L2). vor besser L1 L2 ... vor besser L1 L2 L4 L3 besser(L1,L2) :- vor(L1,L3), besser (L3,L2).

besser/2 Testen Sie das Prädikat besser/2 z. B. mit der Anfrage besser(tom,petra). Leider erhalten Sie nicht die erwarteten Antworten! Es fehlt eine Abbruchbedingung für die Rekursion besser(L1,L2) :- vor(L1,L3), besser(L3,L2). besser(L1,L2) :- vor(L1,L2).

besser/2 Testen Sie, wie sich für besser/2 auf die Abfragen auswirken eine Vertauschung der beiden Klauseln eine Vertauschung der Ziele im Regelrumpf auf die Abfragen auswirken

Übung 3 Wir betrachten das Prädikat wechsel/2 mit den Klauseln wechsel(a,b). wechsel(X,Y) :- wechsel(Y,X). Welche Ausgabe liefert die Anfrage wechsel(A,B) ? Untersuchen Sie auch hier die Wirkung einer Vertauschung der beiden Klauseln

Übung 4 Bearbeiten Sie die Arbeitsanweisungen des Kapitels 4.5 der Handreichung „Wissensverarbeitung mit PROLOG“

Listen Die Liste ist die zentrale Datenstruktur in PROLOG. Sie besteht aus einer Folge beliebiger Elemente liste([ ]). liste([Kopf | Rest]) :- liste(Rest). Beispiele: [a,b,c] [a,b,[c,d]] /*geschachtelte Liste*/ [ ] /* leere Liste */

Listenstruktur Die Zerlegung einer Liste in Kopf und Rest ist sehr flexibel: [rhein,ahr,mosel] = [rhein | [ahr,mosel] ] = [rhein,ahr | [mosel]] = [rhein,ahr,mosel | [ ] ] ?- [a,b,c,d] = [K | Rs]. /* Rs Listenvariable */ K = a Rs = [b,c,d]

Listenoperationen Listen sind rekursive Datenstrukturen. Dementsprechend sind auch die Operationen auf Listen rekursiv erklärt. member/2 /* member(X,Xs)  X ist Element der Liste Xs */ member(X,[X|Ls]). member(X,[Y|Xs]) :- member(X,Xs).

member/2 Wir können member/2 auf dreierlei Arten verwenden als Zugehörigkeitstest ?- member(c,[a,b,c]). Antwort: yes ?- member(e,[a,b,c]). Antwort: no zur Erzeugung aller Elemente einer Liste ?- member(X,[a,b,c]). Antwort: X=a; X=b; X=c; no zur Erzeugung von Listen, die ein bestimmtes Element enthalten ?- member(a,Ls). Antwort: Ls = [a|Rs_2]; Ls = [X_2,a|Rs_3]; Ls = [X_3,X_3,a|Rs_4]

laenge/2 - append/3 laenge/2 /* laenge(Xs,N)  die Liste Xs hat N Elemente */ laenge([ ],0). laenge([X|Xs],N) :- laenge(Xs,N1), N is N1+1. append/3 /* append(Xs,Ys,Es)  die Liste Es ist die Verkettung von Xs und Ys*/ append([ ],Ls,Ls). append([X|Xs],Ys,[X|Es]) :- append(Xs,Ys,Es).

delete/3 - insert/3 delete/3 /* delete(X,Xs,Es)  Es ist die Liste Xs ohne das Element X */ delete(X,[X|Ls],Ls). delete(X,[Y|Ys],[Y|Es]) :- delete(X,Ys,Es). insert/3 /* insert(X,Xs,Es)  die Liste Es ist die Liste Xs mit eingefügtem X*/ insert(X,Xs,Es) :- delete(X,Es,Xs).

Beispiel für insert/3 Wie verarbeitet PROLOG die Anfrage insert(3,[1,2],Es) ? insert(X,Xs,Es) :- delete(X,Es,Xs). Die Anfrage verlangt den Beweis von delete(3,Es,[1,2]) Die erste delete-Klausel delete(X,[X|Ls],Ls) passt dazu mit den Instantiierungen X  3, Ls  [1,2] und damit Es  [3|[1,2]] Als Ergebnis wird somit Es = [3,1,2] ausgegeben

Ablaufsteuerung Bei der Bearbeitung einer Anfrage führt PROLOG automatisch Backtracking durch, wenn dies zur Erfüllung des Ziels erforderlich ist. Manchmal ist dies aber nicht notwendig oder nicht gewünscht. max(X,Y,X) :- X >= Y. /* X = max(X,Y) */ max(X,Y,Y) :- X < Y. /* Y = max(X,Y) */ Das Systemprädikat ! („Cut“) verhindert die Suche nach alternativen Lösungen über nachfolgende Klauseln des gerade bearbeiteten Prädikats über Ziele des Regelkörpers, die vor dem Cut stehen

Probleme mit dem Cut Bei Programmen ohne Cut spielt die Reihenfolge der Klauseln für die Lösung höchstens hinsichtlich der Effizienz der Lösungssuche eine Rolle Bei Verwendung des Cut erhalten wir je nach Klauselreihenfolge eventuell verschiedene logische Bedeutungen p :- c. p :- a, !, b. p :- a, !, b. p :- c.

Verneinung Neben den logischen Standardverknüpfungen UND und ODER gibt es das Systemprädikat NOT/1 not(X) :- X, !, fail. /* X ist beweisbar */ not(X). /* X ist nicht beweisbar */ Die Verwendung von not/1 ist nicht unproblematisch: frau(else). frau(petra). mann(peter). mann(frank). ?- not frau(karin). ?- mann(heinz). Antwort: yes Antwort: no „closed world assumption“

Übung 5 Laden Sie das „Menue“-Programm. Stellen Sie geeignete Anfragen und analysieren Sie die Prädikate start/0 und null_auffuellen/1 Laden Sie das „Inssort“-Programm. Stellen Sie geeignete Anfragen und analysieren Sie die Prädikate insertsort/2 und fuege_ein/3

Startprädikat Querydatei für die Datenbasis menue.dtb start :- reconsult('menue.dtb'), write('Menues unter 20 DM'),nl, write('-----------------------------'),nl, write('Gregor Noll 2001'),nl,nl,nl, menue(V,H,N,DM,Pf), DM<20, write(V),tab(15),write(H),tab(15),write(N),tab(15),write(DM),write(','),write(Pf), null_auffuellen(Pf), tab(15),write('DM'),nl, nl, fail. null_auffuellen(Pf) :- Pf=0,!, write('0'). null_auffuellen(Pf).

Sortieren Sortieren durch Einfügen start :- L=[-2,22,1,10,-3,4,2,-1,5,9,4,32], nl,nl,nl,nl,nl, write('Insertsort '),nl,nl, write(L),nl,nl, insertsort(L,S), write(S),nl,nl, fail. insertsort([ ],[ ]). insertsort([X|Rest],Sortiert) :- insertsort(Rest,Sortierter_Rest), fuege_ein(X,Sortierter_Rest,Sortiert). fuege_ein(X,Sortierter_Rest,Sortiert). fuege_ein(X,[Y|Sortiert],[Y|Sortiert1]) :- X>Y,!, fuege_ein(X,Sortiert,Sortiert1). fuege_ein(X,Sortiert,[X|Sortiert]).

Endliche Automaten Mit PROLOG lassen sich besonders durchsichtige Simulationsprogramme für endliche Automaten schreiben Laden Sie das Programm „Akzeptor“ und analysieren Sie seine Funktionsweise Laden Sie das Programm „RightShi“ und analysieren Sie seine Funktionsweise

Akzeptor s r a start :- akzeptiert ([a,b,a,b,a,b,a]),!,fail. akzeptiert(W) :- nl,schreibe(W), startzustand(S), akzeptiert(S,W), write(' <--- Wort akzeptiert'),nl,nl, !,fail. write(' <--- Wort nicht akzeptiert'),nl,nl. akzeptiert(S,[K|Rs]) :- pfeil(S,K,S1), akzeptiert(S1,Rs). akzeptiert(S,[ ]) :- endzustand(S). s r a b startzustand(s). endzustand(s). pfeil(s,a,r). pfeil(r,b,s). schreibe([K|Rs]) :- write(K), schreibe(Rs). schreibe([ ]).

Right - Shifter e s n start :- nl, 1,1 write('RIGHT-SHIFTER'),nl,nl, transduktor([1,0,1,1,0,1,0]), !,fail. transduktor(Eingabe) :- schreibe(Eingabe), write(' ---> '), startzustand(S), transduktor(S,Eingabe). transduktor(Zustand,[E|Rest]) :- pfeil(Zustand,E,A,Neuer_Zustand), write(A), transduktor(Neuer_Zustand,Rest). transduktor(S,[ ]) :- nl,nl. e s 1,0 n 0,0 0,1 1,1 startzustand(s). pfeil(s,0,0,n). pfeil(s,1,0,e). pfeil(n,0,0,n). pfeil(n,1,0,e). pfeil(e,0,1,n). pfeil(e,1,1,e). schreibe([K|Rs]) :- write(K), schreibe(Rs). schreibe([ ]).

Literatur Wissensverarbeitung mit PROLOG Handreichung zum Lehrplan Informatik Koblenz 1995 (LMZ) informatikag.bildung-rp.de Bothe,K. / Stojanow,St. Praktische Prolog-Programmierung Berlin 1991 (ISBN 3-341-01035-7) Göhner,H. / Hafenbrak,B. Arbeitsbuch PROLOG Bonn 1991 (ISBN3-427-46861-5)