【问题标题】:How can I customize the SML/NJ interactive loop?如何自定义 SML/NJ 交互式循环?
【发布时间】:2010-10-18 23:02:57
【问题描述】:

我是标准 ML 的新手,我正在尝试了解 SML/NJ 运行时环境。我想让它适应我的需要。具体来说,我想:

  • 默认使用 IntInf
  • 防止其将字符串和 IntInf 截断为 70 个字符。

这是我在 8 多个小时的阅读文档和实验中发现的。

我可以使用命令在 int 之上重载 IntInf

open IntInf;

我可以使用变量 Control.Print.stringDepth 控制字符串中显示多少个字符。例如,这将让它在截断之前显示 1000 个字符:

Control.Print.stringDepth := 1000;

如何对 IntInf 值执行相同的操作?我可以将深度设置为无限(即完全不截断)吗?

打开 IntInf 是用 IntInf 重载 int 的最佳方式吗?

最后,我如何让这一切在运行时自动加载,以便当我调用“sml”时它在我的默认环境中?


编辑:我后来发现有一个名为 Control.Print.intinfDepth 的选项可以设置为一个很大的数字(比如 999999)。不过,我不知道如何使它无限。

我的其他问题仍未得到解答。


编辑:我遇到了这个set of SML/NJ customizations for a class at Kansas State。为了显示我自己的横幅消息并避免显示“val it = true : bool”,我需要测试 SMLofNJ.exportML 的返回值。如果是真的,堆映像刚刚恢复(即启动),我可以显示一条消息。如果为 false,则只是保存了堆映像。

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    如何让这一切在运行时自动加载,以便当我调用“sml”时它在我的默认环境中?

    您需要创建一个 堆映像 以由 sml 脚本运行,然后您可以符号链接到该脚本。为了避免引导的复杂性,我通常给我的堆映像一个不同的名称;例如; sml-nw 用于 SML/NJ,支持 noweb

    创建堆映像所需的基本原语是SMLofNJ.exportML。使用方法如下:

    1. 按照您想要的方式设置所有内容,例如,open IntInf 并设置您的所有 Control.Print 变量。 (您可以尝试设置 Control.Printthings tovalOf Int.maxInt`,这是最接近无穷大的值。)

    2. SMLofNJ.exportML "mysml" 创建一个新的堆映像。当您开始定制版本时,您将在致电 exportML 后立即开始。阅读the documentation。到处玩;有很多方法可以使用这个原语。

    3. 将堆映像(可能是mysml.x86-linux)复制到堆映像的安装目录(在我的安装中,/usr/lib/smlnj/bin/.heap,但您可以按照sml 脚本中的线索确定)

    4. 创建一个脚本mysml,它是sml 脚本的符号链接。

    在过去,这已经足够了,但我已经好几年没有使用 SML/NJ 了。我还在网上找到了somewhat outdated example

    【讨论】:

    • 谢谢。我确实在文档中发现了它并且它有效,但我认为必须有一种更好的方法来保留通常的“欢迎”横幅消息并且在启动时不显示“val it = true:bool”。你正常使用莫斯科机器学习吗?
    • @Barry:如果您想避免“val it = ...”消息,您必须弄清楚如何调用顶级 read/eval/print 循环。 Compiler.Interact.interact 看起来很有希望,但我的安装中莫名其妙地缺少它。
    • @Barry:这些天我的函数式编程主要是 OCaml 或 Haskell。当我编译遗留的 SML 代码时,它通常使用 MLton。
    • @Barry:我现在向 SML/NJ 报告了一个错误,他们同意 Compiler.Interact.interact 中宣传的功能似乎已经丢失...
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 2010-10-23
      • 2010-12-27
      • 2010-10-15
      • 2013-09-18
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多