在标准ML中抑制“val it”输出

时间:2009-08-12 09:30:21

标签: sml smlnj

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

print "SML is ready.\n";

当我运行脚本时,一切顺利,但SML解释器显示打印功能的返回值。

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

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

3 个答案:

答案 0 :(得分:12)

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

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

I don't show my type

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

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

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

答案 1 :(得分:3)

使用此:

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

答案 2 :(得分:1)

在Moscow ML中,您可以运行REPL而无需使用以下声明输出

mosml -quietdec file.sml