Sml 我能把IntInf变成字符串吗?

Sml 我能把IntInf变成字符串吗?,sml,Sml,所以,我正在用SML写一个程序。它工作得很好,但当应用非常大的整数时,会产生以下错误: uncaught exception Overflow [overflow] raised at:Basis/Implementation/num-scan.sml:268.20-268.28 我认为应该使用IntInf结构而不是int。 但是,由于在我的程序中,我将int转换为字符串,反之亦然,如何将IntInf转换为字符串?使用IntInf.toString: $ sml S

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

     uncaught exception Overflow [overflow] 
        raised at:Basis/Implementation/num-scan.sml:268.20-268.28
我认为应该使用IntInf结构而不是int。
但是,由于在我的程序中,我将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位整数,并且有必要
打开IntInf
,以便类型
int
被类型
IntInf.int
覆盖。但似乎SML/NJ在这种方式下是灵活的,这显然是不必要的,至少在REPL中不是这样

您还可以从较小的31位整数构造它:

- IntInf.pow (IntInf.fromInt 2, 64);
val it = 18446744073709551616 : IntInf.int
此处,文本
2
64
适合于以下函数:

- IntInf.fromInt;
val it = fn : int -> IntInf.int

- IntInf.pow;
val it = fn : IntInf.int * int -> IntInf.int
因此,虽然整数文本在SML/NJ中重载,因此它们可以直接表示
IntInf
,也可以表示31位整数,但也可以使用较小的整数和库函数构造
IntInf
,而不引用这样的文本(因此
IntInf
更多地被视为抽象类型)。这并不是必须的