Lispas, XLisp, Salix Prolog und MProlog im Vergleich

Lispas II: LISP mit pascalischer Abstammung

LISP hat als eine der ältesten Computersprachen noch lange nicht ausgedient. Daran ändert auch das Erscheinen neuer Sprachen für den Bereich der KI, wie z. B. Prolog, nichts. Es ist also beileibe kein Anachronismus, wenn die Firma Tommy Software einen LISP-Interpreter für den ATARI ST anbietet. Uber den Leistungsumfang und die Zielgruppe dieses Produktes informiert dieser Bericht.

Der Lieferumfang

Lispas II wird mit einer schreibgeschützten Diskette und einem 57-seitigen Handbuch geliefert. Der Preis beträgt 198,- DM. Für weitere 148,-DM wird Mitte des Jahres (nach mündlicher Auskunft) ein Lispas Tutor erhältlich sein. Und der ist angesichts der knappen Dokumentation auch erforderlich, denn das Handbuch ist nur als alphabetische Zusammenfassung der Lispas Funktionen (siehe Anhang 1) mit kurzer Erklärung zu gebrauchen. Auch hier verspricht Tommy Software bis Mitte des Jahres Verbesserung, wenn das neue Handbuch veröffentlicht wird. Daß die Diskette schreibgeschützt ist, ist verständlich, aber für HD-Besitzer ärgerlich. Aber bei einem System, das wie Lispas weitgehend ohne Dokumentation auskommt (tut es wirklich!), ist der andere Weg (Dokumentation auf rotem Papier) eben nicht möglich.

Zielgruppen

Ganz eindeutig sind Schüler und Studenten, die LISP lernen wollen, die Hauptzielgruppe dieses Produktes. Und für jene bietet Lispas vor allen Dingen einen hervorragenden LISP-like-Editor. Die Bedienung des Editors, wie des ganzen Systems ist etwas gewöhnungsbedürftig, aber nach durchstandener Gewöhnungsphase angenehm.

Bedienung des Systems

Nach dem Starten meldet sich Lispas mit einem Fenster. In diesem Fenster spielt sich der ganze Dialog ab. Es können direkt Funktionen eingegeben werden, wobei das ganze Fenster als Arbeitsplatz zur Verfügung steht. Die RETURN-Taste dient dabei zum Zeilenvorschub, bewirkt aber keinerlei Übersetzungsfunktion. Mit den Cursortasten kann im Text beliebig herumgefahren werden. Ist die Funktion vollständig und korrekt eingegeben, signalisiert man Lispas den Wunsch zur Evaluierung mit der Fl-Taste. Dieses ungewohnte Verhalten steht zwar in der Bedienungsanleitung, ist von mir aber zunächst überlesen worden (vielleicht doch zu klein gedruckt?!). Der Versuch, die Evaluierung über das Schließen des Fensters zu erzwingen, gelingt zwar, leider führte dieser Weg aber zu einigen unerwarteten und unliebsamen Reaktionen (z. B. war nach dem Befehl (PRINTER) nicht mehr auf (CONSOLE) umzuschalten). Sollten Fehler in der Funktion vorhanden sein, deckt sie das System mit einer detaillierten Fehlermeldung auf. Dann wird es höchste Zeit, den Editor zu laden. Das geschieht mit dem Befehl (LOAD ’EDIT). EDIT ist ein LISP Programm und ein markantes Beispiel für die Qualität dessen, wozu ein Lispas Programm fähig ist. Natürlich steht dem Anwender der Source Code zur Verfügung, so daß er die Flut von Fensteranwendungen, die bei Benutzung des Editors auf ihn niederprasselt, als Vorlage für eigene Anwendungen nutzen kann. Der Start des Editors geschieht mit (EDIT Funktionsname). Wird der Funktionsname weggelassen, öffnet sich ein Menü-Fenster, in dem alle vorhandenen (und nicht editierbaren) Funktionen angezeigt werden. Man bringt den Cursor auf die gewünschte Funktion und drückt wieder F1. In einem neuen Fenster erscheint dann die gewünschte Funktion, damit Änderungen an ihr vorgenommen werden können. Allerdings arbeitet der Editor nicht ganz fehlerfrei. Wird bei der Änderung Text über den Rand des Fensters geschoben, dann ist er offensichtlich verloren! Mit GotoLisp oder QuitEditor aus dem Menübalken kann dann in der LISP Interpreter zurückgegangen werden. Mir erscheinen die beiden Varianten eher verwirrend; für meinen Geschmack hätte ein Menüpunkt ausgereicht. Der erste Menüpunkt ist wohl für schnelles Austesten von Programmen gedacht, denn nach einem Fehler kehrt man mit dem Befehl (EDIT) direkt in die eben verlassene Funktion zurück. Mit dem eben beschriebenen Verfahren ist es eine Freude, eigene LISP Programme zu entwickeln. Der Benutzer braucht sich auch über die Strukturierung seines Programmtextes keine Gedanken zu machen. Egal wie spaghettihaft der Text eingegeben wird, immer erscheint er im Editor und beim Abspeichern auf Diskette in schönster strukturierter Schreibweise. Das Abspeichern der gewählten Funktionen gestaltet sich allerdings weniger komfortabel als das Editieren. Man muß alle zu speichernden Funktionen von Hand in einer Liste zusammengetragen und als Argument an die SAVE Funktion übergeben. Lediglich die Auswahl des Files geschieht wieder GEM-like über die Fileselector-Box. Eigenwillig ist auch das Format des gespeicherten Files: Alle Funktionen werden von einem Klammerpaar eingefaßt, und zwischen den Funktionen ist kein Zwischenraum vorhanden. Will man vorhandene LISP-Programme unter Lispas laden, muß man sie erst in dieses Format bringen. Außerdem ist Lispas sensitiv für Groß-Kleinschreibung. D. h. Heinz, hEinz und heinz sind drei verschiedene Atome. Solange man sich angewöhnt, gleich zu Beginn einer Arbeitsphase die CAPS-LOCK Taste zu betätigen, ist das nicht weiter schlimm. Ich persönlich ziehe allerdings die in XLISP vorhandene Umsetzung auf Großschrift vor, weil die implementierten Funktionen ja doch nur in Großschrift erkannt werden.

Der Leistungsumfang

Wie man Anhang 1 entnimmt, enthält Lispas die wichtigsten Common Lisp Funktionen. Zusätzlich sind viele Funktionen für eine einfache Fensterverwaltung vorhanden. Man kann sich über den Sinn und Unsinn von übermäßiger Fensterlei streiten, unstreitbar scheint mir aber die Notwendigkeit nach Nutzung der hervorragenden Grafikmöglichkeiten des ATARI ST. Und genau diese werden von Lispas ebenso wenig unterstützt wie von XLISP. Ebenso gravierend ist die Beschränkung auf Integer Arithmetik. Einem Computer wie dem ST steht einfach eine Sprache, die nur ganze Zahlen als arithmetische Datenobjekte zuläßt, nicht mehr gut zu Gesicht. Da bei vielen LISP Implementationen heute bereits objektorientierte Eigenschaften zu finden sind, stünden auch Lispas objektorientierte Datenstrukturen gut zu Gesicht, fehlen aber vollständig. Und wie ist es mit der Geschwindigkeit? Ich habe in einem Benchmarktest die Ergebnisse der Vergleichsmessungen zusammengefaßt (siehe Artikel Benchmarktest). Der Hersteller gibt an, daß Lispas mit dem CCD-Pascal compiliert wurde. Da XLISP mit dem Lattice C-Compiler compiliert wurde, ist eine vergleichbare Geschwindigkeit zu erwarten, und das trifft ja auch zu. Natürlich hat XLISP bei der Bildschirmausgabe Geschwindigkeitsvorteile, da XLISP im TOS-Modus arbeitet und nicht die langsamen GEM-Routi-nen zur Bildschirmausgabe benutzen muß. Daß Lispas von dem Hersteller als Lernsystem betrachtet wird, erkennt man unter anderem daran, daß es nicht möglich ist, sogenannte stand-alone Anwendungen zu erstellen, d. h. Programme, die ohne den Lispas Interpreter lauffähig sind: Eine notwendige Voraussetzung für den kommerziellen Einsatz. Unter diesem Aspekt sollte das System insgesamt betrachtet werden.

Fazit

Lispas läßt sich am treffendsten als Lisp-Editor mit nachgeschalteten Interpreter charakterisieren. Und das ist keineswegs abwertend gemeint. Denn wer mit XLISP gearbeitet hat, wird sicher mehr als einmal beim Klammernzählen ins Schleudern gekommen sein. Die Fähigkeiten des Interpreters selbst sind dagegen nicht überwältigend. Weder von der Geschwindigkeit, noch vom Leistungsumfang her bietet der Interpreter Besonderes, mit Ausnahme der Fenstersteuerung. Wer also LISP lernen will (und das sollte man!), keine kommerziellen Anwendungen im Sinn hat, und wem die Bedienung des XLISP Systems zu kompliziert ist, der hat mit Lispas sicher eine gute Möglichkeit, der Sprache näher zu kommen. Noch ein Wort zum Preis. Natürlich gibt es das PD XLISP. Hat Lispas da überhaupt noch eine Berechtigung? Ich glaube schon. Zählt man nämlich den Preis für einen guten Editor und eine Menü-Shell zusammen, legt man auch über DM 100,- hin und hat noch nicht einmal einen Editor, der die spezielle LISP-Syntax berücksichtigt.

SALIX Prolog

Während sich MPROLOG sowohl vom Preis als auch vom Leistungsangebot eindeutig an den professionellen Anwender richtet, ist mit dem SALIX Prolog ein preisgünstiges Prolog erschienen, Welches über einige interessante Eigenschaften verfügt und zudem mit DM 198,- preisgünstig ist.

Lieferumfang

Abbildung 1: Über die Menüleiste lassen sich Dateien konsultieren

SALIX Prolog wird auf einer einseitig formatierten Diskette geliefert, zusammen mit einem 293-seitigen ausgezeichneten Handbuch. Die Diskette enthält keinen Kopierschutz, so daß einer Installation auf einer HD nichts im Wege steht. Dafür ist aber die Dokumentation „kopiergeschützt“, da auf rotem Papier gedruckt. Ich halte das durchaus für eine wirkungsvolle Art des Kopierschutzes, weil bei einem komplizierten System wie Prolog und solch ausgezeichneter Dokumentation wohl kaum jemand auf die Orginaldokumentation verzichten möchte. Natürlich setzt dieses System des Kopierschutzes eine hohe Qualität der Dokumentation voraus. Und die ist bei diesem Produkt gegeben. Auf 56 Seiten werden zunächst das Prinzip des Prolog Interpreters und dann die speziellen Eigenschaften dieser Implementation besprochen. Natürlich ist diese Einführung kein Ersatz für ein gutes Lehrbuch. Aber die wesentlichen Informationen über Ein-Ausgabe, arithmetische Prädikate usw. geben dem Prolog-Kenner einen schnellen Überblick über die Implementation. Es folgen 167 Seiten für die alphabetische Liste aller Systemfunktionen, mindestens eine Seite pro Prädikat, unterteilt in die Unterpunkte:

a) Syntax,
b) Funktion,
c) Anwendung,
d) FAIL,
e) ERROR,
f) Bemerkungen,
g) Abweichungen von Clocksin & Mellish Standard,
h) siehe auch, i) Beispiele.

Aus dieser Aufzählung dürfte bereits hervorgehen, wie sorgfältig die Dokumentation zusammengestellt wurde und wie sehr die Autoren bemüht waren, dem Standard von Clocksin & Mellish [1] zu folgen. Auf diesen Seiten werden auch einige Prädikate aufgelistet, die nur in einem später erscheinenden SALIX Prolog Professional zu finden sind. Leider sind die Informationen über dieses Produkt in der Dokumentation dünn gesät. Es lag dem Autor auch keine Version dieses interessant klingenden Produktes vor. Nach dem ersten Eindruck der vorliegenden Dokumentation kann das SALIX Prolog Professional auch vom TOS gestartet werden, und besitzt ein Interface für C- und Assemblerroutinen. Die restliche Dokumentation widmet sich dem Debugging, den GEM-Funktionen, sowie dem alphabetischen Stichwortverzeichnis.

Eigenschaften

SALIX Prolog ist voll in GEM integriert. Es stellt sich fensterorientiert dar und stellt dem Benutzer alle GEM Funktionen zur Verfügung. Der Benutzer befindet sich nach dem Start zunächst im TOP-LEVEL Interpreterfenster. Aus der Menüleiste heraus ist die Consultierung von Prolog Files möglich, das Starten des Editors, einzelne Prädikate können gelistet und Optionen eingestellt werden (Abb. 1). Leider ist die Entwicklung des Systems wohl etwas unter Zeitdruck geraten, denn einige Details sind nicht ganz wasserdicht. Zunächst einmal fällt auf, daß dem System kein eigener Editor mitgegeben wurde. Es wird vorausgesetzt, daß der Benutzer das Textsystem 1st_Word besitzt. Dieses ist im File START.PRO vorgesehen. Will der Benutzer einen anderen Editor benutzen, dann muß er das in diesem File ändern. Beim Aufruf von 1st_Word gibt es dann den ersten Bug zu entdecken: Bei Anwahl eines Files auf einem anderen als dem Default-Laufwerk meldet sich 1st_Word erneut mit einer File-Selector-Box auf dem Default Laufwerk. Schlimmer wird es, wenn über die Menüleiste ein File auf Laufwerk B: zur Consultation angewählt wird, während Laufwerk A: als Default eingestellt ist: ein simpler Absturz (nichts geht mehr!) ist die Folge. Das Arbeiten mit lst_Word als Editor gestaltet sich dagegen angenehm, weil nach dem Verlassen des Textprogramms sofort Prolog zur Verfügung steht. Man muß also im normalen Betrieb den Prolog Interpreter nicht verlassen und hat so etwas wie eine Menü-Shell zur Verfügung. Die erwähnten Fehler scheinen darauf zu beruhen, daß eine Pfadänderung in der File Selector Box nicht wahrgenommen wird. Dieser simple Fehler sollte schnell entfernt werden können. Ein weiterer Fehler ist der Absturz bei Verwendung einer RAM-Disk. Offensichtlich kollidiert die Shell-Verwaltung mit der RAM-Disk, denn der Start des Prolog Interpreters aus der RAM-Disk produziert eine Serie von Bomben. Der Benutzer ist daher auf die Verwendung der Diskettenlaufwerke bzw. der Hard Disk angewiesen, was zusammen mit den oben erwähnten Fehlern die Bedienung als 2-Drive System umständlich macht.

Leistungsdaten

Die Geschwindigkeit des Interpreters ist hervorragend (siehe Benchmarktest). Dies gilt sowohl für das Consultieren von Prolog Texten als auch für die Ausführungsgeschwindigkeit von Programmen. Dies ist umso erstaunlicher, als die Implementation die komplette Edinburgh-10 Syntax unterstützt und darüber hinaus noch folgende Ergänzungen zur Verfügung stellt:

Zu den Datenobjekten von SALIX Prolog gehören auch Gleitkommazahlen. Es werden eine Reihe von arithmetischen Prädikaten für Gleitkommazahlen zur Verfügung gestellt. Dazu gehören u. a. die wichtigsten trigonometrischen Funktionen.

SALIX Prolog ermöglicht den vollen Zugriff auf die GEM-Bibliothek. Es wurden sogar einige Standardprädikate so erweitert, daß Zugriff auf Elemente von GEM-Objektbäumen möglich wurde. Beispiele hierzu sind die Prädikate read, readatom und read-token, die die Angabe eines Elementes aus einem Objektbaum ermöglichen, über den die Eingabe erfolgen soll.

Im angekündigten Professional Prolog wird darüber hinaus der Zugriff auf Prolog-fremde Datenstrukturen in Aussicht gestellt, wie sie in C- und Assemblerroutinen genutzt werden könnten.

Debugging

Gerade für Anfänger ist es sehr wichtig, gute Debugginghilfen zur Verfügung zu haben. Einerseits können damit Fehler gefunden werden, andererseits ist es besonders bei einer Sprache mit eingebautem Backtracking nützlich, den Programmablauf verfolgen zu können, um mit der Arbeitsweise des Interpreters vertraut zu werden. Das vorliegende Produkt bietet erfreulicherweise reichlich derartiger Hilfen. Mit Hilfe des Menüpunktes Options, aber auch über die Tastatur (es können übrigens alle Menüpunkte konventionell über die Tastatur eingegeben werden!) können folgende Debugging Hilfen gesetzt werden:

trace
Hiermit wird ein ausführliches Protokoll aller aufgerufenen Prädikate und der durchlaufenen Ports angefertigt. Ausschalten durch notrace.

spy
Spione kann man selektiv auf eine oder mehrere Prädikate ansetzen. Es werden dann nur diese Prädikate im Debug-Fenster ausgegeben. Ausschalten durch nospy. Das Prädikat de-bugging liefert eine Liste aller aktiven Spione und mit nodebug werden alle Spione gleichzeitig ausgeschaltet.

leash
Leashing entspricht dem Setzen von Breakpoints. Mit Hilfe von leash kann man zusammen mit trace oder spy veranlassen, an bestimmten Ports zu stoppen. Mit unleash kann der leash Befehl wieder rückgängig gemacht werden.

Weiterhin erhält der Benutzer die Möglichkeit, eigene Debug-Hilfen zu programmieren, indem er das Prädikat debug definiert, welches bei einem Fehler aufgerufen wird. Für Anfänger besonders hilfreich dürfte eine kurze Anleitung zum debuggen von Programmen sein, mit Hinweisen auf die von Anfängern am häufigsten gemachten Fehler.

Was fehlt?

Wie oben erwähnt, orientiert sich der Autor von SALIX-Prolog am Clocksin & Mellish Standard. Leider fehlt dennoch ein wichtiger Aspekt von PROLOG: die Grammatik. Mit Hilfe einer Grammatik lassen sich automatisch Regeln übersetzen, was sowohl für die Analyse formaler Sprachen als auch für den Compilerbau interessant ist. Näheres zur Verwendung von Grammatiken siehe [2]. Allerdings liefert Salix Prolog das Prädikat tco/2. Mit Hilfe dieses Prädikates ist es möglich, beliebige Grammatiken selbst zu übersetzen.

Kompatibilität zu TOY-Prolog

Viele Interessenten für Salix Prolog kommen möglicherweise aus dem Lager der TOY-Prolog Benutzer (PD). Für diese ist extra ein Startfile START. TOY in dem Ordner Namens PARTBOX enthalten. Kopiert man diesen auf die Diskette als START.PRO (Nennen Sie den Originalfile START. PRO vorher um!), dann versteht Salix Prolog Toy Prolog Programme. Leider sind in diesem Startup File doch noch Fehler enthalten. Beispielsweise übersetzt Toy Prolog grammatische Regeln (s. o.). Mit dem neuen Start File ist Salix Prolog nun tatsächlich in der Lage, grammatische Regeln zu lesen. Leider aber wird die Übersetzung nicht fehlerfrei vorgenommen. Nach erster vorsichtiger Schätzung dürfte der Fehler bei der Übersetzung nichtterminaler Symbole entstehen, wenn die rechte Seite der grammatischen Regel mehr als zwei nichtterminale Symbole enthält, so daß mehr als die Variablen S, SO, S1 erforderlich sind.

Zukünftige Entwicklung

Das SALIX Prolog wird zur Zeit in der Version 1.4 ausgeliefert. Besitzer älterer Versionen können diese zum Selbstkostenpreis beim Heim Verlag Umtauschen. Eine verbesserte Version wird außerdem für das nächste Jahr in Aussicht gestellt. Diese soll einen Editor für den Arbeitsbereich, ein BLOCK - BLOCKexit Konstrukt enthalten sowie die Verarbeitung unendlicher Datenstrukturen ermöglichen. Auch hier ist wieder mit einer liberalen Updatepolitik zu rechnen.

Fazit

Bis auf kleine Mängel im Bereich des File Handling ist Salix Prolog ein ausgesprochen leistungsfähiges Produkt. Die ausgezeichnete Dokumentation und die hervorragenden Debug-Hilfen machen es einem Anfänger leicht, mit Prolog warm zu werden. Amateure (im besten Sinne!) sind wohl die Hauptzielgruppe dieses Interpreters, dessen Preis von DM 198,- bei der gebotenen Leistung mehr als gerechtfertigt erscheint. Die Professional Version wird (nach letzter mündlicher Information) von der Firma Brainware in Berlin für DM 498,-vertrieben.

Literatur

[1] Clocksin, W. F. & C. S. Mellish. Programming in Prolog.
Springer Verlag Berlin Heidelberg New York, 1981.

BENCHMARK

Abbildung 1: Benchmarktests der KI-Sprachen

Benchmark (engl.: Meßlatte) ist die Bezeichnung eines Tests, der die Leistungsfähigkeit von Software klären soll. Ein absolutes Maß der Leistungsfähigkeit kann damit natürlich nicht gemeint sein, weil jedes Softwareprodukt seine speziellen Schwerpunkte besitzt, die es von den Konkurrenten unterscheidet. Man ist im allgemeinen schon froh, wenn ein Benchmark Test eine relative Aussage über eine Palette von Produkten erlaubt. Dieser Test untersucht die Leistungsfähigkeit der vier preisgünstigen KI-Sprachen für den ATARI ST: LISPAS und XLISP für die traditionelle KI-Sprache, LISP sowie TOY und SALIX Prolog für die modernere Sprache PROLOG.

((DEFUN BEDROHT (I J A B)
    (OR (= I A) (= J B) (= (-  I J) (- A B))
     (= (+ I J) (+ A B))))
 (DEFUN KONFLIKT (N M BRETT)
    (COND ((NULL BRETT) NIL)
     ((OR (BEDROHT N M (CAAR BRETT) (CADAR BRETT)) (KONFLIKT N M (CDR BRETT))))))
 (DEFUN QUEEN (GROESSE) (QUEEN-AUX NIL 0 GROESSE)) 
 (DEFUN QUEEN-AUX (BRETT N GROESSE)
    (COND ((= N GROESSE))
     (T (QUEEN-SUB BRETT N 0 GROESSE))))
 (DEFUN QUEEN-SUB (BRETT N M GROESSE)
    (COND ((= M GROESSE))
     (T
      (COND ((KONFLIKT N M BRETT))
       (T
        (QUEEN-AUX (CONS (LIST N M) BRETT) (+ N 1) GROESSE))) 
      (QUEEN-SUB BRETT N (+ M 1) GROESSE)))) N (+ M 1) GROESSE))))))
)))))

Listing 1: Der Benchmarktest in LISP

Das Meßprinzip

Das Prinzip des Benchmark Tests ist einfach: man läßt ein bestimmtes Programm laufen und stoppt die erforderliche Ausführungszeit. Je kürzer die Ausführungszeit, desto leistungsfähiger das Programm. Oder? Ganz so einfach ist es natürlich nicht! Schließlich spielt auch noch eine Rolle, welchen Komfort das Programm liefert, wie fehlerfrei es ist und wie sicher eine Fehlbedienung abgefangen wird. Von der Dokumentation ganz zu schweigen. Trotzdem hat so ein simpler Benchmarktest seine Existenzberechtigung als zusätzliches Auswahlkriterium. Im Verlauf dieses Artikels sollen daher die Programme bzw. Methoden erläutert werden, die zu dem Ergebnis in Abb. 1 führen. Um die Ausführungszeit der verschiedenen Interpreter zu vergleichen, wurde das Damen-Problem in LISP und PROLOG programmiert und dessen Ausführungszeiten gemessen. Beide Versionen benutzen Listen zur Lösung des Problems. Hiermit ist ein Leistungsvergleich zwischen den beiden Sprachen überhaupt erst sinnvoll. Andererseits sollten auch spezielle PROLOG-Eigenschaften verglichen werden. Deshalb habe ich den Beweis „Haßte Markus Cäsar?“ (siehe [1]), der ausgiebig von den Datenbankeigenschaften von PROLOG Gebrauch macht, zum PROLOG-internen Benchmark herangezogen. Ein vergleichbares Programm für LISP gibt es nicht (Jedenfalls nicht ohne das Listenkonzept). Für die praktische Arbeit mit den Sprachen ist die sogenannte Turn-around-Zeit interessant, das ist die Zeit, die man während der Programmentwicklung braucht, um ein Programm in den Interpreter zu laden, in den Editor zu geben und wieder zu laden. Ich habe mich darauf beschränkt, die Ladezeit und Speicherzeit eines ca. 3 kByte langen Programmes zu messen. Im letzten Test habe ich die Zeit gemessen, die ein Programm braucht, um Zahlen auf den Bildschirm auszugeben.

Queen

Das Damenproblem besteht darin, auf einem n ★ n-Schachbrett n Damen so zu plazieren, daß sie sich gegenseitig nicht bedrohen (Abb. 2 zeigt eine mit SALIX Prolog berechnete Lösung). Im Benchmark wurde auf eine grafische Darstellung verzichtet, weil in XLISP und LISP AS keine Grafik möglich ist. Listing 1 zeigt die LISP AS Version. Listing 2 die entsprechende PROLOG Version. Die Zeiten entsprechend der Lösung eines 6^6-Brettes. Näheres zum Problem und zur Lösung findet man bei [2] und [3].

Abbildung 2: Eine Lösung des Damen Problems

Beweis

Das Programm zur automatischen Beweisführung findet man in dem Artikel [1], Es wurde gemessen, wie lange der TOY Prolog (PD) bzw. SALIX Prolog Interpreter für den Beweis benötigen. Da dieses Programm die typische Prolog Struktur besitzt, wurde auf eine Implementation in LISP verzichtet.

File Save

Es wurde ein ca. 3 kByte langer Programmtext geladen. Im Fall von LISP handelt es sich um den PROLOG Interpreter, der auf der XLISP PD Diskette mitgeliefert wurde. Für Prolog diente wieder das Programm zur Beweisführung als Vorlage.

Load

Es werden die gleichen Programme wie bei File Save benutzt. Die langen Lade- und Speicherzeiten erklären sich daraus, daß das Programm in ASCII-Text umgewandelt werden muß und umgekehrt.

Ergebnis

Wie die Abb. 1 eindeutig zeigt, ist SALIX Prolog der unzweifelhafte Gewinner dieses kleinen Benchmarktests.

(Dr. K. Sarnow)

Literatur

[1] Sarnow, K. Einführung in die künstliche Intelligenz. ST-Computer /87.
[2] Winston, P. H., B. K. R Horn. LISP. Addison Wesley, 1984.
[3] Wirth, N. Algorithmen und Datenstrukturen. Teubner, 1983.

bedroht(I,J,A,B)
    I =:= A;
    J =:= B;
    (I - J) =:= (A - B); 
    (I + J) =:= (A + B).

konflikt(N,M,[]):-fail. 
konflikt(N,M,[[A,B]IC]):-
    bedroht(N,M,A,B); 
    konflikt(N,M,C).

queen(Size):- queen_aux([],0,Size).

queen_aux(Brett,N,N):-printr(Brett). 
queen_aux(Brett,N,Size)
    queen_sub(Brett,N,0,Size).

queen_sub(Brett,N,M,M). 
queen_sub(Brett,N,M,Size):-
    (   konflikt(N,M,Brett)
    ;
        ( J is N+1,
            queen_aux([[N,M]|Brett],J,Size)
        )
    ),
    K is M+1,
    queen_sub(Brett,N,K,Size).

Listing 2: Der Benchmarktest in PROLOG



Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]