2009-08-12 6 views
7

J'écris un "script" en ML standard (SML/NJ) qui configure l'environnement interactif à mon goût. La dernière chose que le script fait est d'imprimer un message indiquant que tout s'est bien passé. Pour l'essentiel, la dernière ligne est la suivante:Suppression de la sortie "val it" dans la norme ML

print "SML is ready.\n"; 

Quand je lance le script, tout va bien, mais l'interprète affiche SML la valeur de retour de la impression fonction.

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

Depuis que je suis l'impression simplement quelque chose à l'écran, comment puis-je supprimer le « val = il(): unité » sortie de sorte que tout ce que je vois est le message « SML est prêt », suivi par l'interprète rapide?

Répondre

10

Pour réduire l'invite et la réponse SML-NJ, utilisez l'affectation suivante.

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

I don't show my type 

mais je ne vois pas pourquoi la fonction d'impression retournant le type est mauvaise.

La fonction say contrôle ce qui est imprimé.

Il est un exemple plus dans la SML/NJ suivant note http://www.cs.cornell.edu/riccardo/prog-smlnj/notes-011001.pdf

La fonction useSilently peut être utilisé pour charger un fichier, mais sans afficher aucune sortie associé au chargement

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 

C'est essentiellement changer la fonction de dire de ne rien faire et de le remettre à la fin.

2

Utilisez ceci:

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