代码之家  ›  专栏  ›  技术社区  ›  Barry Brown

如何定制SML/NJ交互循环?

  •  3
  • Barry Brown  · 技术社区  · 15 年前

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

    • 默认情况下使用IntInf
    • 防止它将字符串和IntInf截断为70个字符。

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

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

    open IntInf;
    

    我可以使用变量control.Print.stringDepth控制字符串中显示的字符数。例如,这将使其在截断前显示1000个字符:

    Control.Print.stringDepth := 1000;
    

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

    最后,如何在运行时自动加载这些内容,以便在调用“sml”时它位于默认环境中?


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

    我的其他问题仍然没有答案。


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

    2 回复  |  直到 15 年前
        1
  •  3
  •   Norman Ramsey    15 年前

    如何在运行时自动加载这些文件,以便在调用“sml”时,它位于默认环境中?

    您需要创建一个 由政府管理 sml 脚本,然后可以象征性地链接到该脚本。为了避免引导的复杂性,我通常给我的堆映像起一个不同的名字;例如 sml-nw 适用于SML/NJ,支持 noweb

    创建堆映像所需的基本原语是 SMLofNJ.exportML

    1. open IntInf 把你所有的 Control.Print 变量。(您可以尝试设置控件。打印 things to valOf 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 在网上。

        2
  •  0
  •   gknauth    15 年前