10

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

print "SML is ready.\n";

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

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

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

4

3 回答 3

13

要抑制 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 函数更改为什么都不做,然后在最后将其设置回来。

于 2009-08-15T19:17:33.770 回答
3

用这个:

val _ = print "I don't show my type";
于 2013-01-17T22:14:09.117 回答
2

在莫斯科 ML 中,您可以在没有声明输出的情况下运行 REPL

mosml -quietdec file.sml
于 2018-11-16T06:58:48.807 回答