我正在使用big_int类型.我查看了OCaml的图书馆Pervasives.
例如:in Int32
let t = 5l
Printf.printf "%ld" t
Run Code Online (Sandbox Code Playgroud)
如何定义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 = ()
Run Code Online (Sandbox Code Playgroud)
对于不适合原生的数字,请int使用Big_int.big_int_of_string.示例:Big_int.big_int_of_string "99999999999999999999999".
完整的功能列表在这里.
最后,该Big_int模块非常古老而笨拙.界面可以追溯到caml-light,其中模块系统是基本的.这就是每个函数名称冗余重复"big_int ..."的原因.如果您现在正在选择一个大整数库,我会推荐Zarith,它既现代又高效.Zarith的缺点是它是一个单独的下载(目前).
对于OCaml,有几个现代的“大数目”库,所有关于GNU MP的接口:
ZArith更好的原因有两个:
malloc(),这与通过分配的普通分配方案相反,后者不太适合函数式编程。