在标准ML中抑制"val it"输出

Bar*_*own 10 sml smlnj

我正在标准ML(SML/NJ)中编写一个"脚本",根据自己的喜好设置交互式环境.脚本做的最后一件事是打印出一条消息,表明一切顺利.基本上,最后一行是这样的:

print "SML is ready.\n";
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,一切顺利,但SML解释器显示print函数的返回值.

SML is ready.
val it = () : unit
-
Run Code Online (Sandbox Code Playgroud)

由于我只是在屏幕上打印一些东西,我怎么能抑制"val it =():unit"输出,这样我所看到的就是"SML就绪"消息,然后是解释器提示符?

pjp*_*pjp 12

要抑制SML-NJ提示和响应,请使用以下分配.

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

I don't show my type
Run Code Online (Sandbox Code Playgroud)

虽然我不明白为什么返回类型的打印功能很糟糕.

say函数控制打印出来的内容.

以下SML/NJ注释中有一个更大的例子http://www.cs.cornell.edu/riccardo/prog-smlnj/notes-011001.pdf

useSilently函数可用于加载文件,但不显示与加载相关的任何输出

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
Run Code Online (Sandbox Code Playgroud)

这实质上是将say函数更改为什么都不做,然后在最后将其设置回来.