Hier gelangen Sie direkt zum
Online-Prolog:
SimplePrologPlus.
Schreibe in der Programmiersprache deiner Wahl einen simplen PrologCompiler
mit der dazugehörigen abstrakten Maschine gemäß den Beschreibungen von den Herren Wilhelm und Maurer
[COMPILER97]!

Dieses Projekt findet seinen Anstoß in der Philosophie meines Erlanger
KI-Professors
Prof. Dr. H. Stoyan.
Stoyan ist der Auffassung,
dass ein Informatiker jederzeit in der Lage sein muss, eine eigene Programmiersprache zu entwickeln.
Zudem eignet sich im Rahmen der
KI-Vorlesung
die Nachimplementierung der Programmiersprache Prolog besonders gut,
da man mit ihr den Umgang mit einer Wissensbasis eines
KI-Systems
ohne viel Aufwand üben kann.
Des Weiteren bietet Prolog eine praxisnahe Anwendungsmöglichkeit der Prädikatenlogik erster Stufe.
So gut wie keiner der bei Stoyans Vorlesung hat jemals mit Prolog oder mit einem anderen Vertreter des
Logik-Kalküls
(wie z. B. mit CLP)
zu tun gehabt.
:-(
Deshalb mussten wir zunächst so schnell wie möglich die Programmiersprache Prolog erlernen,
um diese dann später implementieren zu können.
In den Übungsstunden sahen wir uns mit einem Crashkurs in Prolog konfrontiert.
Da wir dank des Grundstudiums auf funktionale Programmiersprachen
(SCHEME oder SML)
aufbauen konnten,
haben wir recht schnell das Gesamtkonzept dieser Sprache begriffen.
Ich selbst nenne dieses Projekt
SimpleProlog
und verwende zu dessen Realisierung die Programmiersprache
PHP
in Zusammenhang mit
HTML/CSS.
Meine Idee gleicht der Idee eines jeden
PHP-Liebhabers:
- Ein Projekt onlinefähig machen,
ein onlinefähiges Prolog mit
user-interface!
So habe
ich
ein lauffähiges OnlineProlog, welches alle Anforderungen der Aufgabenstellung erfüllt, implementiert.
Genauer gesagt gibt es nun zwei Versionen:
- SimpleProlog
Die Version gemäß den Anforderungen.
PHP-Source-Codes
sowie einige kleine
SimpleProlog-Programmbeispiele
sind dabei.
- SimplePrologPlus
Diese Version enthält zusätzlich die Operationen:
Die
Prolog-Grammatik
sowie die abstrakte Maschine WiM mussten etwas erweitert werden.
Aber der Aufwand lohnte sich,
da nun kompliziertere Algorithmen, wie zum Beispiel Sortieralgorithmen, formuliert werden können.
PHP-Source-Codes
sowie viele kleine
SimplePrologPlus-Programmbeispiele
sind dabei.
Dieses OnlineProlog erfüllt lediglich die Minimalvoraussetzungen eines PrologInterpreters.
Der Umgang mit Konstanten wie zum Beispiel Zahlen oder Strings ist nicht integriert.
Ebenso können keine Module geladen werden.
Selbst der allseits beliebte
syntaktische Zucker fehlt!
Zum Beispiel können Listen nicht wie üblich mit eckigen Klammern gebildet,
sondern nur mittels Strukturtermen konstruiert werden,
also statt
[a, b, c]
empfiehlt es sich,
cons(a, cons(b, cons(c, nil)))
bzw.
mylist(mylist(mylist(nix, a), b), c)
zu schreiben und dementsprechend zu behandeln.
Trotz dieser Einschränkungen kann SimpleProlog einiges zum allgemeinen Verständnis von Prolog beitragen,
zumal Prolog-Beispiele reichlich vorhanden sind.
% Das Konkatenieren zweier Listen bezeichnet man als append.
append(nil, L, L).
append(cons(X, XL), YL, cons(X, ZL)) :- append(XL, YL, ZL).
?- append(cons(a, cons(b, nil)), cons(c, nil), Result).
% ergibt:
% Result = cons(a, cons(b, cons(c, nil)))
Man muss nur die folgende
Prolog-Listenschreibung
[X|XL]
in
cons(X, XL),
[a, b, c]
in
cons(a, cons(b, cons(c, nil)))
umwandeln.
Denn Listen sind ja nichts anderes als einfach verkettete Tupel
(cons)
mit Terminierung
(nil),
ähnlich wie in
SCHEME.
Da wir ja einen Prologcompiler entwickeln mussten, haben wir zwangsläufig die Hintergründe von Prolog besser kennen gelernt,
nach dem Motto:
„Willst du eine Sprache lernen, dann schreibe einen Compiler für diese Sprache!”
:-)