如何在SML中使用IntInf或LargeInt?

时间:2011-10-18 12:48:12

标签: biginteger sml

我想通过此链接中的pow等函数在SML中执行大整数的计算:

http://www.standardml.org/Basis/int-inf.html#IntInf:STR:SPEC

但是如何使用这个“库”?


更新:

感谢您的回答。我知道了。我还必须用

更改打印限制
Control.Print.intinfDepth := 10000;

我为IntInfs创建了自己的pow函数(并且它可以工作),如下所示:

fun power 0 = IntInf.toLarge 1
  | power n = IntInf.toLarge 2 * power(n-1);

2 个答案:

答案 0 :(得分:3)

这取决于您使用的实现,但通常需要使用Int.toLarge将Int转换为LageInt / InfInf类型:

(* will be types as an IntInf *)
val aa = 10983298432984329843298432984329843298432987987987432987987987432987
val a = IntInf.pow(aa,10);

(* explicit type as if some other constraint had enforced this*)
val b = 10 : int
val c = Int.toLarge b;

val d = IntInf.pow(c, b);

可能无法在解释器中解析变量aa。这取决于你使用什么。我用poly和mlton测试了它。

上面得到的类型(由带有-show-basis标志的mlton给出):

val a: intInf
val aa: intInf
val b: int32
val c: intInf
val d: intInf

答案 1 :(得分:0)

-fun prod(a:IntInf.int,b:IntInf.int):IntInf.int = a + b;

val prod = fn:IntInf.int * IntInf.int - > IntInf.int

例如

- >关于如何表示一个大整数:IntInf.int作为函数内的参数