2009-08-12 8 views
7

Sto scrivendo uno "script" in Standard ML (SML/NJ) che imposta l'ambiente interattivo a mio piacimento. L'ultima cosa che fa lo script è stampare un messaggio che indica che tutto è andato liscio. In sostanza, l'ultima riga è questa:Sopprimere l'output "val it" in Standard ML

print "SML is ready.\n"; 

Quando eseguo la sceneggiatura, tutto va bene, ma l'interprete SML visualizza il valore restituito dalla funzione di stampa .

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

Dal momento che sto semplicemente stampare qualcosa sullo schermo, come posso eliminare la "Val IT =(): Unità" uscita in modo che tutto quello che vedo è il "SML è pronto" messaggio seguito dall'interprete richiesta?

risposta

10

Per sopprimere il prompt e la risposta SML-NJ, utilizzare la seguente assegnazione.

Compiler.Control.Print.out := {say=fn _=>(), flush=fn()=>()}; 
print "I don't show my type"; 

I don't show my type 

anche se non vedo perché la funzione di stampa che restituisce il tipo è errata.

La funzione di dire controlla ciò che viene stampato.

C'è un esempio più nel seguente SML/NJ rileva http://www.cs.cornell.edu/riccardo/prog-smlnj/notes-011001.pdf

La funzione useSilently può essere utilizzato per caricare un file, ma senza visualizzare alcun output associato al carico

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 

Questo essenzialmente cambiando la funzione di dire per non fare nulla e quindi riportarlo alla fine.

2

Utilizzare questa:

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