我正在尝试使用SML/NJ,我用它sml < source.sml来运行代码,但它打印出太多的信息.
例如,这是source.sml:
fun fac 0 = 1
| fac n = n * fac (n - 1)
val r = fac 10 ;
print(Int.toString(r));
Run Code Online (Sandbox Code Playgroud)
这是输出:
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
Run Code Online (Sandbox Code Playgroud)
来自标准ML中的抑制"val it"输出,如何禁用SMLNJ警告?,并且SMLNJ想要从每个print语句执行中删除"val it =():unit",我得到了一些提示如何抑制它们.
我执行CM_VERBOSE=false sml < $filename并Control.Print.out := {say=fn _=>(), flush=fn()=>()};在代码中添加了一行,但我仍然有一些消息:
Standard ML of New Jersey v110.77 [built: Tue Mar 10 07:03:24 2015]
- 3628800
Run Code Online (Sandbox Code Playgroud)
如何只输出输出?
该sml命令旨在交互使用。在我看来,你最好从你的程序构建一个独立的可执行文件。
有以下几种选择:
如果您依赖 SML/NJ 扩展,或者如果您根本无法使用其他 ML 实现,则可以按照本文中的说明构建 SML/NJ 堆映像,该映像可以使用heap2exec转换为独立的可执行文件。
更好的选择可能是使用MLton编译器,这是标准 ML 的另一种实现。它缺少 REPL,但与 SML/NJ 不同,它不需要样板来生成独立的可执行文件。构建就像发布一样简单:
$ mlton your-program.sml
$ ./your-program
3628800
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |