Как использовать IntInf или LargeInt в SML? - PullRequest
3 голосов
/ 18 октября 2011

Я хочу выполнить вычисления с большими целыми числами в SML, используя такие функции, как pow в этой ссылке:

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

Но как мне использовать эту "библиотеку"?


UPDATE:

Спасибо за ответ. Я понял. Мне также пришлось изменить предел для печати с

Control.Print.intinfDepth := 10000;

Я сделал свою собственную функцию pow для IntInfs (и она работает) так:

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

Ответы [ 2 ]

3 голосов
/ 18 октября 2011

Это зависит от того, какую реализацию вы используете, но обычно вам нужно конвертировать ваши Int в типы LageInt / InfInf с Int.toLarge:

(* 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.

, где вышеприведенное получает типы (заданные mlton с флагом -show-based):

val a: intInf
val aa: intInf
val b: int32
val c: intInf
val d: intInf
0 голосов
/ 14 апреля 2018

- забавный продукт (a: IntInf.int, b: IntInf.int): IntInf.int = a + b;

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

например

-> о том, как представить большое целое число: IntInf.int в качестве параметра внутри функции

...