MProlog auf dem Atari: Programmierte Logik

Ein Prologprogramm läßt sich als eine Wissensbasis auffassen, über die Fragen beantwortet werden. Daher ist Prolog eine sehr interaktive Sprache. Dieses Wissen besteht aus einer Menge logischer Aussagen. Das Verfahren, mit dem Prolog die Antworten berechnet, ist ein logisches Beweisverfahren. Ein einfaches Beispiel:

Unser Beispiel zeigt ein vollständiges Prolog-Programm. Die Prädikate »vater«, »mutter« und »grossvater« drücken jeweils Beziehungen zwischen Menschen aus. Dieses Programm kann die Frage »Wer sind die Großväter von Fritz?«, in Prolog »?- grossvater(X,fritz)«, beantworten.

Ein sehr umfangreiches Prolog-System ist MProlog, das für den Atari erhältlich ist. MProlog steht für »Modulares Prolog«. Dies zeigt bereits, worauf die Entwickler von MProlog großen Wert gelegt haben: Größere Programmsysteme lassen sich nur dann mit vertretbarem Aufwand entwickeln, wenn ein Modularisierungskonzept zur Verfügung steht. Ein Modul in MProlog besteht aus einer Schnittstellenbeschreibung und dem »body«. Die Schnittstellenbeschreibung legt fest, welche Prädikate exportiert (das heißt global sind) und welche importiert werden. Die restlichen Prädikate sind nur lokal im Modul verfügbar. Prädikate in Prolog entsprechen am ehesten dem, was in anderen Sprachen Prozeduren sind. Beispiel:

Die Philosophie der Programmentwicklungsumgebung von MProlog entspricht den klassischen Vorstellungen: Die Programmentwicklung im kleinen (Entwicklung einzelner Module) ist getrennt von der Programmentwicklung im Großen, das heißt die Entwicklung kompletter Anwendungssysteme. Für den ersten Schritt gibt es das PDSS (Program Development Support System). Dies entspricht einem üblichen Prolog-Paket mit integrierter Programmentwicklungsumgebung.

/* Fakten: */ 

vater(egon, hans). /* Egon Ist der Vater von Hans. / vater(hans, fritz). / Hans ist der Vater von Fritz./ mutter(maria, fritz). / Maria ist die Mutter von Fritz. / vater(emil, maria). / Emil ist der Vater von Maria.*/

/* Regeln: */

grossvater(Grossvater, Enkel):- /* Der Vater vom Vater / vater(Grossvater, Vater), / ist ein Großvater.*/ vater(Vater, Enkel).

grossvater(Grossvater, Enkel) :- /* Der Vater der Mutter / vater(Grossvater, Mutter), / ist ein Großvater.*/ mutter(Mutter, Enkel).

Computerlogik schnell programmiert

Im PDSS stehen ein Kommandofenster, ein Screeneditor und ein Grafikfenster für die Logo-ähnliche Eagle-Grafik zur Verfügung. Bei Syntaxfehlern erscheint die Programmstelle im Editorfenster und kann dort direkt korrigiert werden. Dies funktionert auch beim Einlesen einer Quelldatei, was beim Übertragen von Programmen sehr hilfreich ist. Das Kommandofenster selbst arbeitet leider nur zeilenorientiert.

Eine Help-Funktion liefert zu jedem Kommando eine — manchmal sehr kurze — Dokumentation. Da die Help-Texte in einer normalen ASCII-Datei enthalten sind, können sie an die eigenen Bedürfnisse angepaßt werden.

Neben dem PDSS gibt es noch ein kleineres Programmentwicklungssystem PDA (Program Development Aid). Da das PDA stärker menügesteuert ist, fällt der Umgang mit ihm am Anfang leichter. Allerdings stellt es nicht die volle Funktionalität des PDSS zur Verfügung.

Fertige Module werden mit dem Pretranslater PRTR in eine interne Form übersetzt und können dann mit dem Consolidator CONS zusammen mit anderen Modulen zu komplexeren Modulen oder zu kompletten Programmen zusammengebunden werden. Die Programme führt der Interpreter aus. PDSS ist nichts anderes als ein solches Modul, das auch in eigene Programme einzubinden ist. Die meisten Programmentwicklungsumgebungen für Sprachen wie Lisp und Prolog sind anders organisiert: Zwischen Entwicklungsumgebung und Runtimesystem wird nicht unterschieden. Etwas Äquivalentes zu »PTRT« und »CONS« gibt es dort meist nicht. Compiler arbeiten typischerweise inkrementell aus der Entwicklungsumgebung heraus: Sie compilieren einzelne Prädikate beziehungsweise Funktionen und binden sie sofort dynamisch in die Umgebung ein. MProlog besitzt eine große Anzahl von vordefinierten Prädikaten. Die Syntax entspricht dem DEC-10-Prolog, die Semantik und die Namen dieser Prädikate halten sich aber nicht an das DEC-10-Prolog. Allerdings sind die DEC-10-Prädikate als eigenes Modul verfügbar.

Viele der vordefinierten Prädikate restaurieren — im Gegensatz zu den meisten anderen Prolog-Implementationen — beim Backtracking den alten Zustand: zum Beispiel bei Eingabeoperation und bei der Manipulation der Wissensbasis. Dies bringt erhebliche Vorteile beim Programmieren.

Die Dokumentation umfaßt gut 500 Seiten in Englisch und setzt umfangreiche Prologkenntnisse voraus. In dieser Dokumentation sind die speziellen Eigenschaften der Atari-Version nicht berücksichtigt. Die Unterschiede werden in einem eigenen kleinen Heft beschrieben.

Der Speicherplatzbedarf für das Entwicklungssystem PDSS beträgt mindestens 1 MByte. Dies zeigt bereits, daß man mit dem Atari beim derzeitigen Speicherausbau an der unteren Grenze liegt. MProlog ist ursprünglich für Mainframes konzipiert worden. PDSS läßt sich nicht laden, falls das Betriebssystem nicht in ROMs ist oder größere Accessories vorhanden sind. Wegen dem oben beschriebenen Aufbau der Entwicklungsumgebung ist eine Festplatte dringend zu empfehlen. Programmbeispiele gehören zum Lieferumfang: einige Zeichenprogramme zur Demonstration des GEM-Interfaces, das Benchmarkprogramm »naive reverse«, ein Flugverbindungs-Auskunftssystem sowie ein Informationssystem über Wechselwirkungen zwischen Medikamenten.

Module verwandschaftsbeziehungen.
export (vater / 2 , mutter / 2 , grossvater / 2).
body.

...(Programm 1)

endmod /* verwandschaftsbeziehungen */.

Modularer Programmaufbau mit MProlog

Soweit zum ersten Eindruck, den MProlog beim Benutzer hinterläßt. Wirklich beurteilen kann man aber ein solches System erst, wenn man einige größere Programme mit ihm entwickelt hat. Der Versuch, ein vorhandenes größeres Programm von zirka acht Seiten Code umzusetzen, erwies sich als nicht einfach, da die DEC-10-Prädikate zwar als übersetzter Modul, nicht aber im PDSS zur Verfügung standen.

Als Geschwindigkeit werden im Handbuch auf der Basis eines Listeninvertierungsprogramms (naive reverse) zirka 800 bis 900 Lips (Logical Inferences per Second) angegeben, das ist nicht besonders schnell. Der compilierte Code soll 15000 bis 20000 Lips schaffen. Zum Vergleich: Compilierte DEC-10-Prolog-Programme auf der DEC-20 bringen es auf 30000 Lips. In der Gegend von 30000 Lips liegen auch die heutigen Prolog-Maschinen; der Compiler liegt daher im Vergleich gut.

Der Umgang mit MProlog erfordert gute Prologkenntnisse und einige Eingewöhnungszeit. Dies liegt vor allem an dem Umfang der zur Verfügung stehenden Konzepte. Hier hilft ein Lernprogramm für MProlog, der MProlog-Primer, der eine umfassende Einführung in Prolog im allgemeinen und speziell in MProlog liefert. Allerdings ist auch dieses Programm nicht für den unbedarften Anfänger geeignet und zudem nur in Englisch verfügbar. Neben dem computergesteuerten Durcharbeiten von Lehreinheiten erlaubt der MProlog-Primer auch das Testen eigener kleiner Programme. Der MProlog Primer ist nicht im Entwicklungspaket enthalten.

MProlog ist eine umfassende Prologimplementation mit einem Modularisierungskonzept zur Entwicklung großer Programmsysteme.

Die Unterstützung der Programmentwicklung durch das PDSS ist ausreichend, wenn auch nicht so komfortabel wie zum Beispiel Turbo-Prolog.

Das System ist groß, l MByte RAM eines Atari ST reichen für die Programmentwicklung gerade noch aus. Man merkt, daß dieses System eigentlich für Mainframes gedacht ist.

Eine Festplatte ist für ein zügiges Arbeiten absolut notwendig.

Ein Lernprogramm für die Einführung in Prolog und den Umgang mit MProlog steht zur Verfügung. (hb)

Anbieter: Epsilon, Kurfürstendamm 188, 1000 Berlin 15

Steckbrief
Programmname:MProlog
Preis:398 Mark
Hersteller:Epsilon

Stärken:
- Hohe Geschwindigkeit
- umfassende Implementation
- Modularisierungskonzept
- komfortables PDSS
Schwächen:
- Benötigt mindestens l MByte RAM
- MProlog-Primer nicht im Lieferumfang
Fazit: Ein interessanter Drucker im Preisbereich um ca. 1000 Mark mit beeindruckender Schriftqualität

Hilmar Gust
Aus: ST-Magazin 07 / 1988, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite