如何自定义 SML/NJ 交互循环?
我是标准 ML 的新手,我正在尝试了解 SML/NJ 运行时环境。 我想根据我的需要调整它。 具体来说,我想:
- 默认使用 IntInf
- 防止它截断字符串和 IntInf 到 70 个字符。
以下是我在 8 个多小时的阅读文档和实验中发现的内容。
我可以使用命令在 int 之上重载 IntInf
open IntInf;
我可以使用变量 Control.Print.stringDepth 控制显示字符串中的字符数。 例如,这将让它在截断之前显示 1000 个字符:
Control.Print.stringDepth := 1000;
How do I do the same for IntInf value? 我可以将深度设置为无限(即根本不截断)吗?
打开 IntInf 是用 IntInf 重载 int 的最佳方法吗?
最后,如何使这一切在运行时自动加载,以便当我调用“sml”时它位于我的默认环境中?
编辑:我发现有一个名为 Control.Print.intinfDepth 的选项可以设置为一个很大的数字(例如 999999)。 但我不知道如何使其无限。
我的其他问题仍然没有答案。
编辑:我在堪萨斯州遇到了这套 SML/NJ 自定义设置状态。 为了显示我自己的横幅消息并避免显示“val it = true : bool”,我需要测试 SMLofNJ.exportML 的返回值。 如果这是真的,则堆映像刚刚恢复(即启动),我可以显示一条消息。 如果为 false,则刚刚保存了堆映像。
I'm new to Standard ML and I'm trying to get my head around the SML/NJ runtime environment. I want to adapt it to my needs. Specifically, I want to:
- Use IntInf by default
- Prevent it from truncating strings and IntInf to 70 characters.
Here's what I've found in my 8+ hours reading documentation and experimenting.
I can overload IntInf on top of int with the command
open IntInf;
I can control how many characters in a string are displayed with the variable Control.Print.stringDepth. For example, this will let it display 1000 characters before truncating:
Control.Print.stringDepth := 1000;
How do I do the same for IntInf values? Can I set the depth to be infinite (that is, no truncation at all)?
Is opening IntInf the best way to overload int with IntInf?
Finally, how to I make this all load automatically at runtime so that when I invoke "sml" it's in my default environment?
Edit: I've since found out there is an option called Control.Print.intinfDepth that can be set to a large number (say, 999999). I don't know how to make it infinite, though.
My other questions still remain unanswered.
Edit: I ran across this set of SML/NJ customizations for a class at Kansas State. To display my own banner message and avoid displaying "val it = true : bool" I need to test the return value of SMLofNJ.exportML. If it's true, the heap image was just restored (ie, started up) and I can display a message. If it's false, the heap image was just saved.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要创建一个由
sml
脚本运行的堆映像,然后您可以符号链接到该脚本。 为了避免引导的复杂性,我通常给我的堆映像一个不同的名称; 例如;sml-nw
适用于 SML/NJ,支持 noweb。创建堆映像所需的基本原语是
SMLofNJ.exportML
。 使用方法如下:按照您想要的方式设置所有内容,例如,
打开 IntInf
并设置所有Control.Print
变量。 (您可以尝试将 Control.Printthings 设置为
valOf Int.maxInt`,这是最接近无穷大的值。)通过
SMLofNJ.exportML "mysml" 创建一个新的堆映像
。 当您启动自定义版本时,您将在调用exportML
之后立即开始。 阅读文档。 玩耍; 有很多方法可以使用这个原语。将堆映像(可能是
mysml.x86-linux
)复制到堆映像的安装目录(在我的安装中,/usr/lib/smlnj/bin/.heap
) code>,但您可以按照sml
脚本中的线索进行确认)创建一个脚本
mysml
,它是到sml
脚本的符号链接。在过去,这已经足够了,但我已经好几年没有使用 SML/NJ 了。 我还在网上发现了一个有些过时的示例。
You need to create a heap image to be run by the
sml
script, which you can then symbolically link to. To avoid complications of bootstrapping, I usually give my heap image a different name; for example;sml-nw
for SML/NJ with support for noweb.The basic primitive you need to create a heap image is
SMLofNJ.exportML
. Here's how you use it:Set up everything the way you want it by, e.g.,
open IntInf
and setting all yourControl.Print
variables. (You could try setting Control.Printthings to
valOf Int.maxInt`, which is the closest thing to infinity.)Create a new heap image by
SMLofNJ.exportML "mysml"
. When you start your customized version, you'll begin right after the call toexportML
. Read the documentation. Play around; there are a lot of ways to use this primitive.Copy the heap image (maybe
mysml.x86-linux
) to the installation directory for heap images (on my installation,/usr/lib/smlnj/bin/.heap
, but you can follow clues in thesml
script to be sure)Create a script
mysml
that is a symbolic link to thesml
script.In the old days this was enough, but I haven't been using SML/NJ for several years now. I also found a somewhat outdated example on the web.
这有帮助吗?
http://archives. devshed.com/forums/programming-132/big-integers-in-sml-nj-97t-316791.html
不确定无限问题。
Does this help?
http://archives.devshed.com/forums/programming-132/big-integers-in-sml-nj-97t-316791.html
Not sure about infinite question.