project

MProlog ist ein kleiner Prolog Interpreter der ein Subset des ursprüngliche Prologes beherscht. Er umfasst einen Interpreter und eine kleine integrierte Entwicklungsumgebung mit graphischer Ausgabe. Das ganze ist allerdings nur zu Demo-Zwecken verwendbar, um die Arbeit des Prologs zu veranschaulichen, und ist nicht für der produktiven Gebrauch gedacht ;-).

Entwurf und Implementierung: Matthias Mayrock, Matthias König

MProlog screenshot

Prolog ist eine alte "Programmiersprache", eine Art Abfragesprache. In einem Prologprogramm werden Fakten und Regeln definiert, die danach abgefragt werden können.

Ein Fakt ist vergleichbar mit einer Zeile in einer Tabelle einer relationalen Datenbank. Fakten werden in Tabellen unter einem bestimmten Namen abgespeichert. Solche Fakten habe in einem Prolog Programm die folgende Form:

	isMen(mroc).
	isMen(king).
	isWomen(verena).
	isWomen(alenka).
	isFriend(mroc,king).
	isFriend(mroc,verena).
	isFriend(king,alenka).
	isFriend(verena,alenka).
						

Diese vier Zeilen definieren 3 Tabellen:

Der Punkt beendet die Prologanweisung wie in heutigen Programmiersprachen der Strichpunkt ';'.

In einem Prolog Programm können noch Regeln aufgestellt werden. Eine sinnvolle Regel zu den vorherigen Fakten wäre zum Beispiel eine inLove Regel. Eine inLove Regel könnte folgendermaßen aussehen:

	inLove(X,Y):-isMan(X),isWomen(Y),isFriend(X,Y).
						

Dies bedeutet, das alle verliebt sind, wo X in der "isMan" Tabelle, Y in der "isWomen" Tabelle und X und Y in der "isFriend" Tabelle stehen.

Nun kann eine Abfrage an das Prolog System gestellt werden, z.B. gib mir alle Verliebten.

	?-inLove(X,Y).
						

Zu dieser Frage würde das Prolog System als erstes in den Fakten nach ein passenden Tabelle suchen. Dort wird aber keine Tabelle mit dem Namen "inLove" gefunden, die Regeln werden durchsucht. Es wird dann die Regel "inLove" gefunden. Als nächstes wird diese Regel ausgewertet. Eine Regel besteht immer aus logischen "UND" Verknüpfungen. Diese Verknüpfung kann wiederum aus Regeln oder Fakten bestehen. Als erstes würde im Beispiel das Ergebnis der Abfrage "isMan" ausgewertet, dann "isWomen" und zu guterletzt "isFriend". Die Ergebnisse dieser Abfragen werden dann in einem rekursiven Mergin Algorithmus "geundet".

MProlog interpretiert groß geschriebene Wörter wie im Beispiel X und Y als Variablen. Somit werden alle Ergebnisse gebracht. Um die Ergebnissmenge einzugrenzen, können nun auch direkt Werte eingegeben werden wie im folgenden Beispiel:

	?-inLove(mroc,Y).
						

Diese Abfrage würde folgendes Ergebnis liefern: