gpt4 book ai didi

sml - 如何自定义 SML/NJ 交互循环?

转载 作者:行者123 更新时间:2023-12-04 14:03:18 27 4
gpt4 key购买 nike

我是 Standard 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,则刚刚保存了堆图像。

最佳答案

How do I make this all load automatically at runtime so that when I invoke "sml" it's in my default environment?

您需要创建一个堆镜像 以供sml 脚本运行,然后您可以符号链接(symbolic link)到该脚本。为了避免引导的复杂化,我通常给我的堆镜像起一个不同的名字;例如; sml-nw 用于支持 noweb 的 SML/NJ .

创建堆镜像所需的基本原语是 SMLofNJ.exportML。以下是您如何使用它:

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

  2. 通过 SMLofNJ.exportML "mysml" 创建一个新的堆镜像。当您启动自定义版本时,您将在调用 exportML 后立即开始。阅读the documentation .玩耍;有很多方法可以使用这个原语。

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

  4. 创建脚本 mysml,它是 sml 脚本的符号链接(symbolic link)。

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

关于sml - 如何自定义 SML/NJ 交互循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/740896/

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