Zum Forum
Passwort vergessen?
Noch keinen Account?
lexikon
Hauptseite
Zufälliger Artikel
Diskussion
Diskussion : Prolog (Programmiersprache)
Links
Forum
Portale
Reisen
Versicherung
Inhaltsverzeichnis
Hauptmenü
Home
Editorial
Bildung
E-Learning
Fremdsprachen
Magazin
Wissen
Wörterbücher
Enzyklopädien
Expertendienste
Wissenswertes
Praktische Ratgeber
--------------------------
Biologie
Chemie
Computer
Film/ Theater
Geografie
Geschichte
Jura
Kunst
Literatur
Mathematik
Medizin
Musik
Philosophie
Physik/ Astronomie
Politik
Psychologie
Religionen
Sport
Umwelt
Wirtschaft
Reisen
Lexikon
Versicherung
Suchen
Schnellsuche
Suchmaschinen
Metasuchmaschinen
Webkataloge
News
Treffpunkt
Chat
Forum
Suche
Schnellsuche
Sitemap
Kontakt
Impressum
Prolog (Programmiersprache)
Stichpunkte
Allgemein
die maßgeblich von Alain Colmerauer
Prolog („Programming in Logic“) ist eine Programmiersprache
einem französischen Informatiker
Anfang der 1970er Jahre entwickelt wurde und zur Familie der logischen Programmiersprachen zählt
Sie ist eine Vertreterin des Paradigmas der deklarativen Programmierung
"Verbergen") 1 Grundprinzip 2 Weitere Techniken 3 Beispiel 4 Definite Clause Grammar 5 Anwendungsgebiete 6 Siehe auch 7 Weblinks 7.1 Tutorials und Kurse 7.2 Interpreter und Werkzeuge [Bearbeiten]
da sie auf den mathematischen Grundlagen der Prädikatenlogik beruht. Ein Prolog-Programm ist eine Sammlung von so genannten Horn-Klauseln. Inhaltsverzeichnis showTocToggle("Anzeigen"
Man kann die Sprache als "Maschinensprache eines Logik-Prozessors" bezeichnen
Grundprinzip
die Fakten und Regeln umfasst. Der Benutzer formuliert Anfragen an diese Datenbasis. Der Prolog-Interpreter benutzt die Fakten und Regeln
um systematisch eine Antwort zu finden. Ein positives Resultat bedeutet
dass die Antwort logisch ableitbar ist
Prolog-Programme bestehen aus einer Datenbasis
tobias). vater(tobias
ulrike). mutter(eva
frank). mutter(daniela
dass aufgrund der Datenbasis keine Antwort gegeben werden kann. Dies hängt eng mit der Closed world assumption zusammen (siehe unten). Das typische erste Programm in Prolog ist nicht wie in prozeduralen Programmiersprachen ein Hallo-Welt-Beispiel
frank) wird hier verwendet als: Tobias ist der Vater von Frank. mann(adam). mann(tobias). mann(frank). frau(eva). frau(daniela). frau(ulrike). vater(adam
frank). vater(tobias
ulrike). In einem Prolog-Interpreter können nun interaktiv Anfragen an die Datenbasis gestellt werden
Ein negatives Resultat bedeutet nur
sondern eine Datenbasis mit Stammbauminformationen. Folgendes Beispiel repräsentiert den Stammbaum einer kleinen Familie. Die Aussage mann(tobias) liest sich als: Tobias ist ein Mann. vater(tobias
tobias). mutter(daniela
die mit einem Großbuchstaben beginnen
abhängig davon
Das Ausführen eines Prolog-Programms bedeutet immer das Stellen einer Anfrage. Das System antwortet entweder mit yes. oder no.
oder es gibt zusätzlich eine Liste von Variablenbelegungen an. Variablen sind in Prolog alle Token
ob die Anfrage bewiesen werden konnte
Beispiel: ?- mann(tobias). yes. ?- mann(heinrich). no. ?- frau(X). X=eva ; X=daniela ; X=ulrike ; no. (keine weiteren Antworten). Das System kann nur positive Antworten zu Anfragen geben zu denen es Fakten in der Datenbasis vorliegen hat
Wenn etwas fehlt ist die Antwort no (nein)
dass aufgrund der Datenbank nichts ableitbar ist (Closed world assumption)
die bedeutet
Im Beispiel oben ist dies durch die Anfrage ?- mann(heinrich). no. illustriert (heinrich kann in der Datenbasis nicht gefunden werden)
Fakten zu spezifizieren
Zusätzlich zu der Möglichkeit
Regeln zu formulieren. Der Regeloperator :- ist dabei wie ein umgedrehter Implikationspfeil zu lesen
bietet Prolog die Möglichkeit
Y). Die Regel besagt: X ist Großvater von Y
wenn es ein Z gibt
vater(Z
Beispiel: grossvater(X
Y) :- vater(X
Z)
so dass X Vater von Z ist und Z Vater von Y
Y). Regeln mit gleichem Head
frank). X=adam [Bearbeiten]
das heißt gleichem Term vor dem Regeloperator
ulrike). yes. ?- grossvater(X
Y) :- vater(X
werden als oder-verknüpfte Alternativen betrachtet. Jetzt sind Anfragen wie die folgenden möglich: ?- grossvater(adam
mutter(Z
Z)
Damit ist der Großvater väterlicherseits definiert. Eine zweite Regel für den Großvater mütterlicherseits sieht so aus: grossvater(X
Weitere Techniken
ist sie bei der Prolog-Programmierung die einzige Möglichkeit
Entscheidend für die Prolog-Programmierung sind die Techniken der Rekursion und die Nutzung von Listen. Ist die Rekursion in den meisten Programmiersprachen nur eine zusätzliche Variante zur Iteration
"Schleifen" zu produzieren
Y).)
vorfahr(Y
wenn entweder X Elternteil von Z ist (Regel 1) oder es ein Y gibt
Z). vorfahr(X
Y); vater(X
wird das wie folgt realisiert: vorfahr(X
Benötigt man in obigem Beispiel eine allgemeine "Vorfahr"-Relation
Z). Dies lässt sich wie folgt lesen: X ist ein Vorfahr von Z
Z) :- elternteil(X
Y)
das Vorfahr von Z ist und gleichzeitig X Elternteil von Y (Regel 2) (Es wurde hier elternteil statt mutter und vater verwendet. elternteil(X
Y) :- mutter(X
Z) :- elternteil(X
Auch Listen sind ein entscheidender Bestandteil von Prolog
die sich aber auch alle selbst bauen lassen
Die meisten Prolog-Implementationen bringen dafür viele Funktionen mit (Anhängen von Werten
Anzahl der Werte
etc.)
In einer gedachten Familienstruktur muss die Anzahl der Kinder ja variabel sein
gertrud
jutta
[]). Dann ließen sich z.B. mit einer Abfrage alle Familienväter ohne Kinder anzeigen: ?- familie(X
_
[]). X=karl [Bearbeiten]
[peter
Folgendes wäre denkbar: familie(heinz
laura]). familie(karl
Beispiel
welche Zahl an welchen Buchstaben gebunden ist
Ein Beispiel für die Anwendung ist z.B. das Lösen eines mathematischen Rätsels: ABB - CD = EED - - * FD + EF = CE = = = EGD * FH = ??? A bis H stehen jeweils für eine Ziffer 0 bis 9
wobei nicht klar ist
die bei den Fragezeichen stehen muss
Gesucht ist die Zahl
Dieses Problem ist in Prolog sehr einfach zu lösen
7
CD - EF = FH und EED * CE = EGD * FH = X) in Prolog-Syntax schreiben: gl1(A
die bewirkt
F
write(X). Gibt man nun die Abfrage loesung. ein
F
dass A bis H später mit allen möglichen Kombinationen von 0 bis 9 belegt werden (Permutation): gen(A
E
E
gl5(C
E
C
D
F
F
C
B
9]). Nun muss man nur die fünf entstehenden Gleichungen (ABB - CD = EED
H) :- ((C * 10 + D) - (E * 10 + F)) =:= (F * 10 + H). gl5(C
D
F
2
E
[0
D
H
Man schreibt zunächst eine Regel
H
X) :- ((E * 100 + E * 10 + D) * (C * 10 + E)) =:= ((E * 100 + G * 10 + D) * (F * 10 + H))
C
H) :- permutation([A
D
F)
E
wird die Lösung ausgegeben
_]
G
die alles zusammenführt und X ausgibt: loesung :- gen(A
G
X is ((E * 100 + G * 10 + D) * (F * 10 + H)). Wenn einen nur X interessiert legt man sich eine Lösungsregel an
gl3(A
E)
D
H)
B
ABB - FD = EGD
E
E
C
F
3
X)
D
6
E
D
G
F) :- ((F * 10 + D) + (E * 10 + F)) =:= (C * 10 + E). gl3(A
_
FD + EF = CE
D
gl1(A
F
B
H
G) :- ((A * 100 + B * 10 + B) - (F * 10 + D)) =:= (E * 100 + G * 10 + D). gl4(C
D
B
C
D
D
D
B
F
gl4(C
B
F
5
4
B
E
D
G
E
E) :- ((A * 100 + B * 10 + B) - (C * 10 + D)) =:= (E * 100 + E * 10 + D). gl2(C
G
8
E
G)
1
H)
gl2(C
sondern gibt nur die Fakten ein und welches Ergebnis man benötigt
benötigt man zur Lösung dieses Problems fast keine Programmierkenntnisse über Schleifen oder ähnliches
Wie man sieht
Prolog steht in der Abstraktionshierarchie aus genau diesem Grund über imperativen und objektorientierten Sprachen. [Bearbeiten]
Definite Clause Grammar
die in der Form den Regeln entsprechen
die Regeln in einer lesbareren Form zu notieren
der es erlaubt
Um Regeln für Parser zu schreiben haben die meisten Prologsysteme einen Präprozessor implementiert
die man verwendet um kontextfreie Sprache zu beschreiben
Der Präprozessor ergänzt Platzhalter und erzeugt die oben erwähnten Prolog-Logik-Formeln. Referenz: http://www.cs.sunysb.edu/~warren/xsbbook/node10.html [Bearbeiten]
Anwendungsgebiete
In den 1980er Jahren spielte die Sprache eine wichtige Rolle beim Bau von Expertensystemen. Die Sprache wird auch heute noch in den Bereichen Computerlinguistik und Künstliche Intelligenz verwendet. [Bearbeiten]
Siehe auch
denn der Erfinder von Erlang hat am SICS gearbeitet) [Bearbeiten]
Unifikation Definite Clause Grammar
ebenfalls personelle Nähe
Axiom
Deduktion Lisp Erlang (begann als Prolog Interpreter
auch die Syntax ist davon inspiriert
Rückverfolgung (Backtracking)
Weblinks
[Bearbeiten]
Tutorials und Kurse
Heiko Ludwig (http://www.buva.sowi.uni-bamberg.de/lehre/prolog/prolog95/intro.html) [Bearbeiten]
Klaus Schwab
auch für Programmieranfänger verständlich geschrieben. (englisch) Arbeitsbuch Prolog (http://www.bildung-mv.de/download/fortbildungsmaterial/arbeitsbuch_prolog.pdf) Texte zur Geschichte von PROLOG
Lehrstuhl für Wirtschaftsinformatik
Learn Prolog Now! (http://www.coli.uni-saarland.de/~kris/learn-prolog-now/) Online-Buch mit Prolog-Einführung
Skript zur Plenarübung
Sammlung von PROLOG-Prädikaten (http://www.dietmar-schmitt.de/prolog/index.html) Prolog-Kurs aus Leeds (http://www.cbl.leeds.ac.uk/~paul/prologbook/) Prolog-Kurs aus Leeds (Mirror) (http://computing.unn.ac.uk/staff/cgpb4/prologbook/) Prologskript (http://www.cogsci.uni-osnabrueck.de/~helmar/8.5000/) zur gleichnamigen Vorlesung an der Universität Osnabrück (englisch) Prologbeispielsammlung (englisch) (http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html) Programmierkurs Prolog
Interpreter und Werkzeuge
SWI-Prolog (http://www.swi-prolog.org)
erlaubt z.B. constraints basierte Programmierung bg:Prolog da:Prolog (programmeringssprog) en:Prolog eo:Prolog es:Prolog fr:Prolog it:Prolog ja:Prolog nl:Prolog pl:Prolog ru:Пролог (Ñ?зык программированиÑ?) sv:Prolog th:ภาษาโปรล็à¸à¸? zh:Prolog
kostenloser Prolog-Editor für Windows SICStus Prolog (http://www.sics.se/isl/sicstuswww/site/index.html) Prolog System des SICS (Swedish Institute of Computer Science)
ein moderner Open Source Prolog-Interpreter SWI-Prolog-Editor (http://www.bildung.hessen.de/abereich/inform/skii/material/swing/index.htm)
Dieser Artikel basiert auf dem Artikel
Prolog (Programmiersprache)
aus der freien Enzyklopädie
wikipedia
und steht unter der
GNU Lizenz für freie Dokumentation
. In der wikipedia ist eine
Liste der Autoren
verfügbar.
Patente
Phonem
Plattentektonik
Jean-François Pilâtre de Rozier
Per Anhalter durch die Galaxis
Marcus Aurelius Probus
Paul von Hindenburg
Primzahl
[ Zurück ]
Inhalt Lexikon:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
1
2
3
4
5
6
7
8
9
Chat
|
Lexikon
|
Reisen
|
Versicherung
|
Forum
|
Kontakt