我正在使用big_int
类型。我查看了OCaml的库Pervasives
。
例如:在Int32
let t = 5l
Printf.printf "%ld" t
我如何定义t
以及%?d
如果我要声明它是big_int
?
答案 0 :(得分:8)
下面是一个顶级会话。如果您使用编译器,#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"
。
完整的功能列表是here。
最后,Big_int
模块已经很老了,很笨拙。界面可以追溯到caml-light,其中模块系统是基本的。这就是每个函数名称冗余重复“big_int ...”的原因。如果您现在正在选择一个大整数库,我建议使用Zarith,它既现代又高效。 Zarith的缺点是它是一个单独的下载(暂时)。
答案 1 :(得分:3)
OCaml有几个现代“大数字”库,所有关于GNU MP的接口:
ZArith更好有两个原因:
malloc()
的正常分配方案,这不是非常适合函数式编程。