[Pfadname] sml (genauer: /usr/local/bin/sml)
Nach kurzer Zeit erscheint dann:
Standard ML of New Jersey, Version 110.0.3, January 30, 1998 [CM;autoload enabled]
-
Man sollte /usr/local/bin im Suchpfad haben, sonst reicht der Aufruf mit sml nicht, und die folgenden Aufrufe über Emacs funktionieren dann auch nicht!
Ich empfehle, SML im Emacs-Editor zu benutzen. Die wichtigsten Emacs-Befehle sind auf den zwei Seiten der
zusammengefaßt, die man sich (doppelseitig: mit lpr -Plp) ausdrucken kann. Unter dem Menü Help findet man im Emacs auch ein Tutorium zur Bedienung, wo die Befehle genauer erklärt werden. Es lohnt sich, das frühzeitig zu lernen.
Damit die Im Folgenden beschriebenen Emacs-Funktionen wirklich ausführbar sind, muß man in seine ~/.emacs-Datei die Zeilen
(setq load-path (cons "/usr/local/lib/emacs/site-lisp/sml-mode-3.1" load-path)) (load-library "/usr/local/lib/emacs/site-lisp/sml-mode-3.1/sml-init.el")
einfügen. Die am CIS vorgenommenen Menü-Änderungen und die Anbindung entsprechender Systemaufrufe sind dort definiert. (Sie funktionieren bei einer anderen Installation also i.a. nicht oder anders.)
Im Editor Emacs startet man (nach der oben beschriebenen Änderung von ~/.emacs) SML (am CIS) durch
M-x sml (Escape-Taste; x-Taste; sml; Return-Taste),
bei anderen Installationen (ggf. im XEmacs, zu Hause?) durch
M-x run-sml.
Dadurch wird ein SML als Subprozeß des Emacs gestartet, der in einem eigenen Emacs-Puffer namens *sml* erscheint. Dieser Puffer läuft zunächst im Hintergrund; man kann ihn in den Vordergrund holen, indem man entweder
M-x switch-to-sml
eingibt oder den Buffer *sml* unter dem Menüpnkt Buffers des Emacs anklickt.
Eine andere Möglichkeit, SML im Emacs zu starten, geht über die Menüleiste: Nachdem man eine Datei mit Suffix .sml (oder .sig oder .cm) in den Emacs geladen hat, erscheint auf der Menüleiste ein Punkt
SML.
Dort wählt man
Process > run Standard ML of New Jersey 110,
wodurch ebenfalls ein Subprozeß in einem Hintergrundpuffer namens *sml* gestartet wird.
Durch Eingabe von
Ctrl C (Control- und C-Taste simultan)
unterbricht man die Auswertung, und durch Eingabe von
Ctrl D
bricht man einen laufenden SML-Prozess ganz ab.
Im SML-Prozeß wird die Eingabeaufforderung an den Benutzer (der Prompt), durch
-
am Zeilenanfang gekennzeichnet; SML wartet dann auf eine Eingabe.
Das Ende der Eingabe muß der Benutzer durch
; (Semikolon; Return-Taste)
angeben.
Man kann jederzeit durch die Return-Taste eine neue Zeile beginnen, ohne daß SML eine Auswertung der bisherigen Eingaben vornimmt; diese Situation wird durch
=
am Zeilenanfang gekennzeichnet. (Da (Befehl1; Befehl2) auch zur Sequenzierung von Programmen dient, wird ggf. zuerst auf schließ ende Klammern gewartet, bevor ; als Eingabeende erkannt wird!)
Jede Ausgabe von SML am Bildschirm beginnt direkt am Zeilenanfang (bei früheren Versionen mit > am Anfang der Zeile).
Der Emacs verfügt über einen speziellen Modus zum Editieren von SML-Programmen und zur leichteren Interaktion zwischen SML-Dateien und dem SML-Prozess.
Am CIS ist nicht die neueste Version des SML-Modus installiert, sondern die etwas ältere Version 3.1. (Die neueste Version 3.9.2 hat ein paar Funktionen abgeschafft, und ich hatte Probleme bei der Installation.)
Am CIS ist der Emacs so voreingestellt, daß alle Dateien, deren Name ein Suffix der Form .sml, .sig, .cm hat, automatisch beim Laden in den Emacs in (einen Puffer mit) SML-Modus gebracht werden. Man kann aber mit
M-x sml-mode
auch jeden anderen Puffer des Emacs in den SML-Modus bringen. Nur wenn der Cursor in einem Puffer im SML-Modus steht, erscheint auf der Menüleiste der Menüpunkt SML.
Was der SML-Modus leistet, findet man unter dem SML-Menüpunkt
Help on Emacs SML mode
oder durch Eingabe von
C-h sml-mode.
Unter dem Submenü Process findet man Menüpunkte
load ML source file | zum Laden von Dateien, |
send buffer content | zum Laden des jeweiligen Puffers (in dem der Cursor steht) |
send region | ... oder von Teilen dieses Puffers in den laufenden SML-Prozeß, |
goto next error | zum Springen an die vom SML-Compiler gemeldete Fehlerstelle im Programm, |
run Standard ML of NJ | zum Starten von SML als Unterprozeß des Emacs, |
HTML Basis Library | zum Starten der Dokumentation der SML-Bibliothek (am CIS) |
HTML Automata Library | zum Starten der Dokumentation eines Automatenpackets (am CIS) |
Insbesondere das automatische Aufsuchen eines Programmfehlers durch goto next error ist sehr nützlich; es funktioniert auch bei mehreren gleichzeitig bearbeiteten SML-Dateien.
Bem. Beim Aufrufen der Dokumentationen erscheint im Emacs ein Puffer *Async Shell Command*, den ich leider nicht automatisch im Hintergrund halten konnte.
Im Hauptteil des SML-Menüs findet man noch ein paar Punkte, mit denen man Schemata für häufig verwendete Programmkonstrukte automatisch in eine SML-Datei einfügen kann, was die Schreibarbeit etwas erleichtert.
Außerdem kann man z.B. eine automatische Formatierung von Programmteilen durch
M-x indent-region
erhalten, wenn man vorher im Emacs einen Teil der SML-Datei markiert hat. (Für weitere Funktionen siehe Help on Emacs sml-mode.)