仅使用SML / NJ打印打印输出

时间:2015-05-14 02:40:35

标签: sml smlnj ml

我正在尝试使用SML / NJ,我使用source.sml来运行代码,但它打印出太多信息。

例如,这是fun fac 0 = 1 | fac n = n * fac (n - 1) val r = fac 10 ; print(Int.toString(r));

Standard ML of New Jersey v110.77 [built: Tue Mar 10 07:03:24 2015]
- val fac = fn : int -> int
val r = 3628800 : int
[autoloading]
[library $SMLNJ-BASIS/basis.cm is stable]
[autoloading done]
3628800val it = () : unit

这是输出:

CM_VERBOSE=false sml < $filename

Suppress "val it" output in Standard MLHow to disable SMLNJ warnings?SMLNJ want to remove "val it = () : unit" from every print statement execution,我得到了一些如何抑制它们的提示。

我执行Control.Print.out := {say=fn _=>(), flush=fn()=>()};并在代码中添加了一行Standard ML of New Jersey v110.77 [built: Tue Mar 10 07:03:24 2015] - 3628800 ,但我仍然有一些消息:

checked

如何只输出输出?

1 个答案:

答案 0 :(得分:2)

sml命令旨在以交互方式使用。听起来对你来说,最好从程序中构建一个独立的可执行文件。

有几个选择:

  1. 如果您依赖于SML / NJ扩展,或者您根本无法使用其他ML实现,则可以按照this post中的说明构建可以转换为的SML / NJ堆映像使用heap2exec的独立可执行文件。

  2. 更好的选择可能是使用MLton编译器,这是标准ML的另一种实现。它缺少REPL,但与SML / NJ不同,它不需要样板来生成独立的可执行文件。建筑就像发布一样简单:

    $ mlton your-program.sml
    $ ./your-program
    3628800