XLISP ist die bekannte PD-Version der Sprache LISP vom Altmeister David M. Betz, Senior-Editor der Zeitschrift BYTE in den USA. In der PD der ST Computer sind der Reihe nach die Versionen 1.4,1.5 und 1.7/1.71 erschienen. Alle Versionen waren von vornherein als experimentell und damit als vorlĂ€ufige Versionen gekennzeichnet. Die neueste Version 2.0 vom 6.2.1988 macht da schon eher einen bestĂ€ndigen Eindruck. Der folgende Bericht soll die Eigenschaften dieser XLISP-Version im Vergleich zu den vorigen untersuchen. Denn immerhin ist XLISP fĂŒr den ATARI ST Computer zur Zeit die am ehesten dem Common LlSP-Standard entsprechende LISP-Version und dazu noch kostenlos.
ĂuĂeres
Auf der PD-Diskette sind ca. 256 kByte Information und Programme enthalten. Davon entfallen ca. 82 kByte allein auf die Dokumentation, die im knappen Stil der vorigen Dokumentation gehalten ist. Auch das neue XLISP 2.0 verzichtet auf GEM und kommt gleich nach dem Start im VT52-Modus zur Sache. Es werden auch wieder einige nĂŒtzliche Utilities wie der Pretty Printer PP.LSP mitgeliefert, deren Syntax wurde allerdings geĂ€ndert. Funktionen und Macros können mit (PP-DEF < Funktionsname > < Stream >) auf einem Stream. (Default: Bildschirm) ein File kann mit (PP-FILE < Filename > < Stream >) ausgegeben werden. Hier ist im Original ein Fehler. Es wird die Funktion OPENI verlangt, die nirgends deklariert ist. Ich habe diese Funktion im File PP eingefĂŒgt und hoffe, daĂ sie funktioniert. Auf der Diskette ist weiterhin ein Programm QA.LSP aufzufinden. Es handelt sich hier um die LISP-Version der Resolutionsmethode, wie sie in allen PROLOG Interpretern angewendet wird.
Ănderungen am Programm
Es scheint so, daĂ die Ănderungen am Programm im wesentlichen zur Fehlerreduktion des Interpreters gefĂŒhrt haben. Fehler der Version 1.7 bzw. 1.71 wie die Fehlfunktion der PftOG-Funktion bzw. die fehlerhafte Funktion der OBJECT-orientierten Funktionen scheinen jetzt behoben zu sein. Der Sprachumfang ist etwas erweitert und noch mehr dem Common LISP-Standard angeglichen worden. Schauen wir uns die Ănderungen im Detail an Hand des Handbuches an.
Die Unterschiede beginnen beim Start des Interpreters. Wenn XLISP 2.0 gestartet wird, wird zunĂ€chst im aktuellen Inhaltsverzeichnis nach der Datei XLISP.WKS gesucht, die den zuletzt gesicherten Workspace enthĂ€lt. Diese kann mit der .Sâ/H'F-Funktion abgespeichert werden und steht danach mit dem Start zur VerfĂŒgung. Man kann sich also seine eigene Version von XLISP zurechtschneiden und in Zukunft den Workspace mit allen Einstellungen beim Start ĂŒbernehmen. Dann erst wird INIT.LSP geladen und anschlieĂend die in der Kommandozeile angegebenen Dateien.
An Datenstrukturen bietet die neue Version folgende zusÀtzliche Datentypen:
Characters, Streams und Closures. Cha-racters bedĂŒrfen keiner weiteren ErlĂ€uterung. Streams sind eigentlich nur die alten File Pointer, deren Syntax in Richtung Common LISP angeglichen wurde. Als Closures werden die benutzerdefinierten Funktionen bezeichnet. Völlig neu ist also eigentlich nur der Character Datentyp.
Neue Symbole sind ebenfalls hinzugekommen. Es handelt sich um error-output, trace-output und debu-out-put, die den jeweiligen Ausgabestrom definieren. Mit den Symbolen integer-format, float-format und print-case kann das Ausgabeformat festgelegt werden. Die Symbole '+â, '++â und '+++â sind an die letzten drei Eingaben gebunden, entsprechend 'â und â*â an (jjg (jpgj letzten Ergebnisse.
Die neuen Evaluationsfunktionen sind (GET-LAMBDA-EXPRESSION ), die den entsprechenden Lambdaausdruck zurĂŒckgibt; (MACROEX-PAND 
Endlich ist im Bereich der Symbolfunktionen auch die Funktion PSETQ aus dem Common LISP-Reservoir definiert.
An Array-Funktionen ist (VECTOR ) neu hinzugekommen, die einen neuen Vektor initialisiert.
In LISP stellen die Listenfunktionen ja den Kern der Sprache dar. Hier sind nun endlich die leichter verstĂ€ndlichen Funktionen FIRST, SECOND, THIRD, FOURTH und REST als Synonym fĂŒr CAR, CADR, CADDR, CADDR und CDR definiert worden. Neu sind auch (RE-MOVE-IF  <Iist>) und (RE-MOVE-IF-NOT  ), die aus einer Liste je nach Ausgang des Tests Elemente entfernen. Die entsprechenden destruktiven Funktionen lauten DE-LETE-IF bzw. DELETE-IF-NOT. Als sehr nĂŒtzlich dĂŒrfte sich auch der neue .SOAT-Befehl erweisen.
Auch bei den PrÀdikatenfunktionen sind neue hinzugekommen. ENDP testet das Ende einer Liste, INTEGERP, FLOATP, STRINGP CHARACTERP, ARRAYP, STREAMP, OBJECTP testen, welcher Datentyp vorliegt.
Bei WHEN und UNLESS handelt es sich um zwei neue Kontrollstrukturen, die dem //--Konstrukt sehr Àhnlich sind. FLET, LABELS, MACROLET und UN-WIND-PROTECT erzeugen neue Funktionen bzw. kontrollieren die Evaluation eines Terms.
An Schleifenkonstrukten ist das gute alte LOOP hinzugekommen.
Bei den PROGRAM-Features ist es nun möglich, Blöcke zu benennen und abzuarbeiten.
Die Funktionen TRACE und UNTRACE, die bisher extra geladen werden muĂten, sind nunmehr im Standardumfang der Sprache enthalten.
Bei den arithmetischen Funktionen ist GCD (der gröĂte gemeinsame Teiler) hinzugekommen.
Dramatisch verĂ€ndert hat sich die String-Bibliothek. Sie hat sich erweitert um Funktionen, die einen String trimmen (.STRING-TRIM, STRING-LEFT-TRIM, STRING-RIGHT-TRIM), in GroĂ- bzw. Kleinschrift umsetzen (nichtdestruktiv: STRING-UPCASE, STR1NG-DOWN-CASE: destruktiv: NSTRING-UPCASE, NSTRING-DOWNCASE) sowie mehrere Strings miteinander vergleichen können (was in BASIC, PASCAL und C schon lange geht).
Ganz neu sind die Character-Funktionen, die Zeichenextraktion aus einem String ermöglichen, auf das Vorliegen von Klein /GroĂbuchstaben, Ziffern oder Ă€hnlichem testen bzw. die entsprechende Umwandlung ĂŒbernehmen. Auch Zeichenvergleiche sind möglich.
Die Terminologie der Input-/Output-Funktionen wurde dem Stream-Konzept
von Common LISP angeglichen. Was bisher als File Pointer deklariert war, wird nun als Stream deklariert. Neu ist hier allerdings die Möglichkeit formatierter Ausgabe. Ebenso ist die Ein-/Ausgabe ĂŒber String-Streams neu.
Bei den Systemfunktionen ist die Möglichkeit hinzugekommen, den aktuellen Workspace abzuspeichern und spÀter wieder zu restaurieren.
ResĂŒmee
Das XLISP 2.0 ist dem Common LISP-Standard noch nĂ€her gerĂŒckt. Es wurde mit dem Mark Williams C-Compiler compiliert. In den Quelltexten der mitgelieferten LISP-Programme sind die Ănderungen von der Version 1.7 zur Version 2.0 nicht konsequent durchgefĂŒhrt, die notwendigen Korrekturen (siehe OPENI wie oben erwĂ€hnt) dĂŒrften aber auch LISP-AnfĂ€ngern leichtfallen. Es lohnt sich fĂŒr alle, die sich fĂŒr LISP interessieren, diese neue Version zu besorgen.
Dr. K. Sarnow