2009-08-12 2 views
7

Ich schreibe ein "Skript" in Standard ML (SML/NJ), die die interaktive Umgebung nach meinem Geschmack einrichten. Das letzte, was das Skript macht, ist eine Nachricht auszugeben, die anzeigt, dass alles reibungslos funktioniert. Im Wesentlichen ist die letzte Zeile dieses:Unterdrücken "val it" Ausgabe in Standard ML

print "SML is ready.\n"; 

Als ich das Skript ausführen, alles gut geht, aber der SML-Interpreter zeigt den Rückgabewert der Druck Funktion.

SML is ready. 
val it =() : unit 
- 

Da ich nur etwas zum Siebdrucken bin, wie kann ich unterdrücke die „es val =(): Einheit“ ausgegeben, so dass alles, was ich sehe, ist die Nachricht vom Interpreter gefolgt „SML bereit ist“ prompt?

Antwort

10

Verwenden Sie die folgende Zuweisung, um die SML-NJ-Eingabeaufforderung und -Antwort zu unterdrücken.

obwohl ich nicht sehe, warum die Druckfunktion, die den Typ zurückgibt, schlecht ist.

Die say-Funktion steuert, was ausgedruckt wird.

Es ist ein größeres Beispiel in der folgenden SML/NJ Noten http://www.cs.cornell.edu/riccardo/prog-smlnj/notes-011001.pdf

Die useSilently Funktion verwendet werden kann, um eine Datei zu laden, aber ohne jegliche Ausgabe mit dem Laden

zugeordnet Anzeigen
fun useSilently (s) = let 
val saved = !Compiler.Control.Print.out 
fun done() = Compiler.Control.Print.out := saved 
in 
Compiler.Control.Print.out := {say = fn _ =>(), flush = fn() =>()} 
(use (s); done()) handle _ => done() 
end 

Dies ist im Wesentlichen die say-Funktion ändern, um nichts zu tun und dann am Ende zurückzusetzen.

2

verwenden:

val _ = print "I don't show my type";