Kaum eine Sprache trennt die Maschinenarchitektur und den Programmablauf so konsequent wie »Prolog«. Maxon entwickelte nun für die Sprache mit Zukunft einen hochmodernen Interpreter.
Der effektiv in Prolog programmieren will, begibt sich auf das weite Feld der Logik. Ein fundiertes Verständnis der »Logikprogrammierung« ist unbedingt Voraussetzung für das Verständnis von Prolog. Unter Logikprogrammierung versteht man in erster Linie ein abstraktes, systemunabhängiges Konzept: Dreh- und Angelpunkt sind Wahrheit und die logische Ableitung. So können Axiome unter der Berücksichtigung und Interpretation bestimmter Symbole entweder wahr sein oder nicht. Eine logische Ableitung liegt immer dann vor, wenn eine Aussage eine Folgerung aus einem Programm ist.
Prolog ist eine Programmiersprache, deren Programmcodes fast immer wie logische Aussagen aussehen. Die Sprache bleibt deshalb auch relativ übersichtlich und gut leserlich. Einen weiterer Vorteil von Prolog liegt in der hohen Abstraktionsfähigkeit. So ist das Ergebnis eines Prolog-Programms meist die logische Folgerung der Axiome.
Logik als Programmiersprache ist an und für sich relativ neu. Ihr Ansatz unterscheidet sich deutlich von herkömmlichen Systemen, die ja fast allesamt auf dem Prinzip der »von Neumann«-Maschine basieren. In Prolog steht das abstrakte Modell in keinerlei Beziehung zu einem Rechner — nicht der Mensch soll lernen den Computer zu bedienen, vielmehr soll die Maschine lernen, Anweisungen ausführen, die der Anwender versteht und die für den Menschen leicht und unkompliziert sind. Im Idealfall sollte es für Operationen überhaupt keine expliziten Befehle geben, allein das Wissen um Problemstellung und Annahmen führt dabei zur Lösung.
Reines Prolog entspricht eigentlich der Logikprogrammierung. Sämtliche Aussagen und Termologien entstammen der Logik: Fakten, Regeln und Anfragen sind die Hauptbestandteile beider Sprachen — als Datenstruktur existiert mit dem »logischen Term« nur eine Form.
Ein Fakt drückt stets eine Beziehung zwischen bestimmten Objekten aus. Beispiel: Hersteller (Atari, ST-Computer).
Dieser Fakt stellt fest, daß Atari der Hersteller eines ST-Computers ist. Solche Beziehungen nennt die Logik auch Prädikat. Die einzelnen Namen sind dabei Atome. Um aus einem Programm Informationen zu erhalten, gibt es »Anfragen«. Eine Anfrage stellt immer fest, ob eine bestimmte Aussage wahr ist.
Etwas ungewöhnlich verhalten sich Variable — konventionelle Programmierer mit Vorkenntnissen aus prozeduralen Sprachen müssen hier umdenken. Sie stehen nicht etwa für eine Speicherzelle, vielmehr repräsentieren sie einen unspezifizierten, einzelnen Wert. Variable und Konstanten sind Terme, die einzige Datenstruktur in Logikprogrammen. Ein Term beinhaltet einen »Funktor« (Hauptfunktion eines Terms), der durch seinen Namen (Atom), seine Arität (Stelligkeit) sowie durch die Zahl der Argumente definiert ist. Konstanten faßt der Interpreter als Funktoren mit der Stelligkeit Null auf. Anfragen und Terme, die keinerlei Variable enthalten, heißen demgegenüber »grund«. »Ziele« sind dabei Atome oder zusammengesetzte Terme. Jedes Logikprogramm besteht somit aus einer Reihe verschiedener Regeln, die in Prolog auch »Clause« genannt werden.
Der neue Maxon-Prolog-Interpreter umfaßt 112 eingebaute Prozeduren. Die Entwicklungsumgebung wurde selbst unter Maxon-Prolog entwickelt. Sie stellt zusätzlich rund 300 Prädikate bereit — ein integriertes Hilfesystem zeigt zu jedem Thema ausreichend Beispiele. Der Maxon-Prolog-Interpreter erzeugt lediglich Datenstrukturen, aber keinen lauffähigen Maschinencode. Dazu sind einige zusätzliche Operationen erforderlich. Zuerst benötigt der Interpreter ein neues oder leeres Modul. Danach müssen sämtliche Quelltexte des Programms »geparsed« werden. Sind alle Prädikate im Modul zusammengestellt, kann die Initialisierung gestartet werden. Die einfachste Möglichkeit ist dabei, die mitgelieferte Init-Sequenz der Entwicklungsumgebung zu modifizieren.
Die hohe Geschwindigkeit des Prolog-Interpreters verdankt Maxon einer sehr einfachen virtuellen Prolog-Maschine. Sie besteht aus dem »Node-Manager« und einem »Matching«-Algorithmus. Der Node-Manager erkennt seinerseits ausschließlich UND-Strukturen, die allerdings auch mehrfach erscheinen dürfen und so ODER-Strukturen bilden. Der ODER-Term ist dabei durch ein eigenes Prädikat darzustellen, was natürlich zusätzlich Zeit kostet. Im Gegensatz zu bestimmten anderen Prolog-Interpretern besitzt Maxon-Prolog keine Fließkommaarithmetik.
Dies hat seinen Grund: Prolog kennt vom Prinzip her ja eigentlich nur Gleichheit oder Ungleichheit — zudem sind Fließkommaoperationen oft die Ursache von Ungenauigkeiten und Fehlern und widersprechen ohnehin der Idee von Prolog und Logik.
Die Konzeption der Sprache erweiterte Maxon um einige wichtige Punkte: Prozedurale Variable
Damit ist es möglich, wie in prozeduralen Sprachen, Variable zu definieren, die einen bestimmten Speicherplatz belegen. Ihre Lebensdauer ist dabei vom initiierenden »make/1« abhängig. Dabei überleben solche Variablen trotz eines Backtrackings, wodurch speichereffiziente Prädikate mit Schleifenbildung anstatt nur Rekursionen Konstruktionen möglich sind.
Attibute, CutPassing
Will man die Wirkung eines »!« oder »never« weitertragen, besteht in Maxon-Prolog die Möglichkeit, das »CutPassing«-Flag zu setzen.
Memories
Maxon-Prolog erlaubt die Verwendung von Memories. Die Attribute der Memories sind Adresse und Länge. Verwenden kann man Memories für die Kommunikation von prozeduralen GEM-, BIOS-, XBIOS, VDI-, oder AES-Aufrufen. Ebenso ist es möglich, Texte zu editieren, Speicherplatz zuzuweisen oder globale Werte einzufrieren.
Datenbanken
Mit Maxon-Prolog kann man Datenbankprädikate mit »Tables« verwenden. Die Table wird in Form eines Memories dargestellt, wobei sich dahinter die Wurzel einer Baumstruktur verbirgt, die auf die einzelnen Einträge verweist. Auch ein Index kann aus Strukturen bestehen. Darüber hinaus gibt es die üblichen Prädikate zum Lesen, Füllen und Löschen der Datenbank.
Wie die meisten Betriebssysteme verfügt auch Maxon-Prolog über Kanäle für Ein- und Ausgabe. Ein Puffer vermeidet ,Engpässe und sorgt dabei für die nötige Geschwindigkeit. Zu beachten ist allerdings, daß die Anzahl der offenen Windows, Memories etc. begrenzt sind. Keine Grenzen, vom verfügbaren Arbeitsspeicher einmal abgesehen, gibt es für die Zahl von Unterzielen, Prädikaten, Prozeduren, Memories sowie die Größe des Programms sowie der Menge an Variablen innerhalb einer Sitzung. Demgegenüber ist die Länge eines Namens auf 1024 Zeichen begrenzt, die Stelligkeit .auf 8191; der maximale Adreßbereich hat 16 MByte und die maximale Anzahl von Variablen eines Prädikats beträgt 65535. Der Editor zeigt in einem Fenster bis zu 120 Zeilen.
Die Speicherverwaltung kennt keine »Garbage Collection«, vielmehr wird der Arbeitsspeicher normalerweise stackartig verbraucht. Ausnahmen sind die Anlage neuer Atome beim Einlesen, das Erzeugen neuer Strukturen oder die explizite Anforderung von Speicherplatz.
Fazit: Prolog ist eine hochmoderne Methode Programme zu entwerfen, (mn)
Maxon Prolog
Hersteller: Maxon
Vertrieb: Maxon Computer, Schwalbacherstr. 52, 6236 Eschborn
Preis: 99 Mark
Kopierschutz: keiner
Stärken: prozedurale Variable, Attribute, CutPassing, Memories, Datenbank, Kanalkonzept mit Puffer, schnelle virtuelle Prolog-Maschine
Einschränkungen: keine Fließkommaarithmetik, mindestens 1,5 MByte Arbeitsspeicher erforderlich, nicht TT-kompatibel
Fazit: ein hochmodernes Entwicklungssystem für eigenständige Applikationen
Maxon Computer, Schwalbacherstr. 52, 6236 Eschborn