gpt4 book ai didi

sml - 我可以将 IntInf 转换为 String 吗?

转载 作者:行者123 更新时间:2023-12-05 01:19:04 26 4
gpt4 key购买 nike

所以,我正在用 SML 编写一个程序。它工作得很好,但是当应用非常大的整数时,它会产生以下错误:

     uncaught exception Overflow [overflow] 
raised at:Basis/Implementation/num-scan.sml:268.20-268.28

我认为我应该使用 IntInf 结构而不是 int。
但是由于在我的程序中我将整数转换为字符串,反之亦然,如何将 IntInf 转换为字符串?

最佳答案

使用 IntInf.toString :

$ sml
Standard ML of New Jersey v110.79 [built: Tue Aug 8 23:21:20 2017]
- IntInf.toString 1234567890123456789012345678901234567890;
[autoloading]
[...]
val it = "1234567890123456789012345678901234567890" : string

我实际上认为这会产生解析错误,因为整数文字太大而无法容纳标准的 31 位整数,并且有必要使用 open IntInf 以便 int 类型被 IntInf.int 类型覆盖。但似乎 SML/NJ 以这种方式灵活,这显然没有必要,至少在 REPL 中没有必要。

您还可以从较小的 31 位整数构造它:
- IntInf.pow (IntInf.fromInt 2, 64);
val it = 18446744073709551616 : IntInf.int

这里的文字 264 适合函数:
- IntInf.fromInt;
val it = fn : int -> IntInf.int

- IntInf.pow;
val it = fn : IntInf.int * int -> IntInf.int

因此,虽然整数文字在 SML/NJ 中被重载,因此它们可以直接表示 IntInf 或 31 位整数,但您也可以构造一个 IntInf 而不引用这样的文字,使用纯粹较小的整数和库函数(以便 IntInf 更多地被视为抽象类型)。并不是说这是必要的。

关于sml - 我可以将 IntInf 转换为 String 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56438072/

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