einf hrung in prolog n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Einführung in PROLOG PowerPoint Presentation
Download Presentation
Einführung in PROLOG

Loading in 2 Seconds...

play fullscreen
1 / 53

Einführung in PROLOG - PowerPoint PPT Presentation


  • 112 Views
  • Uploaded on

Einführung in PROLOG. 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.).

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 'Einführung in PROLOG' - analiese


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
einf hrung in prolog

Einführung in PROLOG

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
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
PROLOG
  • PROgrammieren in LOGik
    • Anfang der 70er Jahre in Edinburgh von Kowalski und vanEmden 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
Vorteile für die Schule
  • überschaubare Syntax
  • interaktive Programmerstellung
  • deklaratives Programmieren als Gegenstück zum imperativen Konzept
  • kostenlose (gepflegte) PROLOG-Implementationen im InternetSWI-Prolog www.swi.psy.uva.nl/projects/SWI-Prolog/Strawberry Prolog www.dobrev.com/Visual Prolog www.visual-prolog.com/
prolog programm

PROLOG - Programm

Wissensbasis

Anfrage

PROLOG-Programm
  • Programmieren in PROLOG bedeutet
      • das Erstellen einer Wissensbasis
      • die Formulierung intelligenter Anfragen
wissensbasis
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

Fakten

Wissensbasis

Regeln

PROLOG - System

Eingabe von

Daten

Benutzerin Benutzer

Anfrage

Suchstrategien

Inferenzmaschine

Logik

Antworten

klauseln

Faktum

Regel

Klauseln

Fakten Eigenschaften von Objekten oder Beziehungen zwischen ihnen

Regeln „wenn-dann“ Aussagen

fakten
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
Regeln
  • Mit Regeln beschreibt man „wenn-dann“ Aussagen( d. h. bedingte Beziehungen) zwischen Objekten
  • Sie bestehen aus einem (Klausel-) Kopf und einem KörpermitTermen (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
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
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).

Termverknüpfungen
pr dikate
Prädikate
  • Klauseln werden identifiziert über ihren eindeutigen Bezeichner, den Funktor, und ihre Stelligkeit.
  • Alle Klauseln mit gleichem Funktor und gleicher Stelligkeit bilden ein Prädikat

mutter(claudia).mutter/1mutter(else,pia). mutter/2

syntax
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 anonymeVariable
  • Klauseln und Abfragen enden mit einem Punkt .
  • Kommentare stehen zwischen /* und */
anfragen
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=elsemore (y/n)?

bung 1
Ü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
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
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
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
UND-ODER-Baum
  • An der Wurzel steht der Funktor des Prädikats, das mit der Anfrage matched.
  • Die Nachfolgeknoten enthalten die Klauseln des PrädikatesBei Regeln bilden die Klauseln des Rumpfes die Nachfolgeknoten
  • UND-Verknüpfungen von Klauseln werden mit einem Winkelbogen dargestellt.
opa opa fritz
opa(Opa,fritz).

opa / 2

Ident: O=Opa

Inst: E=fritz

opa(O,E)

opa(O,E)

V=fritz

E=fritz

V=hans

E=fritz

mutter(M,E)

vater(V,E)

vater(O,M)

vater(O,V)

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 fritz1
opa(Opa,fritz).

opa / 2

Ident: O=Opa

Inst: E=fritz

opa(O,E)

opa(O,E)

V=fritz

E=fritz

V=maria

E=fritz

mutter(M,E)

vater(V,E)

vater(O,M)

vater(O,V)

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

Inst: O=hans

Inst: V=fritz

opa opa fritz2
opa(Opa,fritz).

opa / 2

Ident: O=Opa

Inst: E=fritz

Ident: O=Opa

Inst: E=fritz

opa(O,E)

opa(O,E)

V=maria

E=fritz

mutter(M,E)

vater(V,E)

vater(O,M)

vater(O,V)

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 fritz3
opa(Opa,fritz).

opa / 2

Ident: O=Opa

Inst: E=fritz

opa(O,E)

opa(O,E)

M=hans

E=fritz

M=fritz

E=fritz

mutter(M,E)

vater(V,E)

vater(O,M)

vater(O,V)

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 fritz4
opa(Opa,fritz).

opa / 2

Ident: O=Opa

Inst: E=fritz

opa(O,E)

opa(O,E)

M=maria

E=fritz

M=fritz

E=fritz

mutter(M,E)

vater(V,E)

vater(O,M)

vater(O,V)

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 fritz5
opa(Opa,fritz).

opa / 2

Ident: O=Opa

Inst: E=fritz

opa(O,E)

opa(O,E)

M=maria

E=fritz

mutter(M,E)

vater(V,E)

vater(O,M)

vater(O,V)

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

Klausel, die dem

Ziel entspricht

exit

call

fail

redo

Trace
  • Einem Trace liegt das Vier-Port-Boxmodell zugrunde
  • 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
fixPROLOG Trace
  • Die Trace-Implementation von fixPROLOG entspricht leider nicht dem Standard
  • 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)

?- opa(Opa,fritz).

  • 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
  • REDO: vater(hans,fritz)
bung 2
Ü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
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/2
  • 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 21

vor

L2

L1

besser

vor

vor

L1

L3

L2

besser

besser

vor

vor

vor

vor

...

L1

L3

L2

L1

L3

L4

L2

besser

besser

besser/2

besser(L1,L2) :- vor(L1,L3), besser (L3,L2).

besser 22
besser/2
  • Testen Sie das Prädikat besser/2z. 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 23
besser/2
  • Testen Sie, wie sich für besser/2
    • eine Vertauschung der beiden Klauseln
    • eine Vertauschung der Ziele im Regelrumpf

auf die Abfragen auswirken

bung 3
Ü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
Übung 4
  • Bearbeiten Sie die Arbeitsanweisungen des Kapitels 4.5 der Handreichung „Wissensverarbeitung mit PROLOG“
listen
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
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 = aRs = [b,c,d]
listenoperationen
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
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 - 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 - 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
Beispiel für insert/3
  • Wie verarbeitet PROLOG die Anfrage insert(3,[1,2],Es) ?
  • 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

insert(X,Xs,Es) :- delete(X,Es,Xs).

ablaufsteuerung
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
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
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
Ü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
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
  • 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
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

a

s

r

b

Akzeptor

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.

akzeptiert(W) :-

write(' <--- Wort nicht akzeptiert'),nl,nl.

akzeptiert(S,[K|Rs]) :-

pfeil(S,K,S1),

akzeptiert(S1,Rs).

akzeptiert(S,[ ]) :-

endzustand(S).

startzustand(s).

endzustand(s).

pfeil(s,a,r).

pfeil(r,b,s).

schreibe([K|Rs]) :-

write(K),

schreibe(Rs).

schreibe([ ]).

r ight shifter

1,1

e

1,0

1,0

s

0,1

n

0,0

0,0

Right - Shifter

start :-

nl,

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.

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
Literatur
  • Wissensverarbeitung mit PROLOGHandreichung zum Lehrplan InformatikKoblenz 1995 (LMZ)informatikag.bildung-rp.de
  • Bothe,K. / Stojanow,St.Praktische Prolog-ProgrammierungBerlin 1991 (ISBN 3-341-01035-7)
  • Göhner,H. / Hafenbrak,B.Arbeitsbuch PROLOGBonn 1991 (ISBN3-427-46861-5)