gpt4 book ai didi

sml - 仅打印 SML/NJ 的打印输出

转载 作者:行者123 更新时间:2023-12-02 04:53:36 27 4
gpt4 key购买 nike

我正在尝试使用 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));

这是输出:

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

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

我执行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

如何只打印输出?

最佳答案

sml 命令旨在交互使用。在我看来,您最好从您的程序构建一个独立的可执行文件。

有几个选项:

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

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

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

关于sml - 仅打印 SML/NJ 的打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30228398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com