Я работаю с типом big_int
. Я посмотрел в библиотеке OCaml Pervasives
.
Например: в Int32
let t = 5l
Printf.printf "%ld" t
Как я могу определить t
и какой %?d
, если я хочу объявить, что это big_int
?
Я работаю с типом big_int
. Я посмотрел в библиотеке OCaml Pervasives
.
Например: в Int32
let t = 5l
Printf.printf "%ld" t
Как я могу определить t
и какой %?d
, если я хочу объявить, что это big_int
?
Ниже представлена сессия верхнего уровня. Директива #load
стала бы опцией ссылки командной строки, если бы вы использовали компилятор:
# #load "nums.cma" ;;
# let t = Big_int.big_int_of_int 5 ;;
val t : Big_int.big_int = <abstr>
# Printf.printf "%s" (Big_int.string_of_big_int t) ;;
5- : unit = ()
Для чисел, которые не помещаются в родной int
, используйте Big_int.big_int_of_string
. Пример: Big_int.big_int_of_string "99999999999999999999999"
.
Полный список функций находится здесь.
Наконец, модуль Big_int
довольно старый и корявый. Интерфейс восходит к caml-light, в котором модульная система была рудиментарной. По этой причине каждое имя функции повторяет «big_int...». Если вы сейчас выбираете большую целочисленную библиотеку, я бы порекомендовал Zarith, современный и эффективный. Недостаток Zarith в том, что это отдельная загрузка (пока).
ocamlc nums.cma t.ml
или ocamlopt nums.cmxa t.ml
.
- person Pascal Cuoq; 02.04.2019
Есть несколько современных библиотек "больших чисел" для OCaml, все интерфейсы про GNU MP:
ZArith лучше по двум причинам:
malloc()
, которая не очень подходит для функционального программирования.