我正在标准ML(SML / NJ)中编写一个“脚本”,根据自己的喜好设置交互式环境。脚本做的最后一件事是打印出一条消息,表明一切顺利。基本上,最后一行是:
print "SML is ready.\n";
当我运行脚本时,一切顺利,但SML解释器显示打印功能的返回值。
SML is ready.
val it = () : unit
-
由于我只是在屏幕上打印一些东西,我怎么能抑制“val it =():unit”输出,这样我所看到的就是“SML就绪”消息,然后是解释器提示符?
答案 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