【发布时间】:2012-05-09 11:19:00
【问题描述】:
我正在使用big_int 类型。我查看了 OCaml 的库 Pervasives。
例如:在Int32
let t = 5l
Printf.printf "%ld" t
如果我想声明big_int,我该如何定义t 和哪个%?d?
【问题讨论】:
我正在使用big_int 类型。我查看了 OCaml 的库 Pervasives。
例如:在Int32
let t = 5l
Printf.printf "%ld" t
如果我想声明big_int,我该如何定义t 和哪个%?d?
【问题讨论】:
下面是一个顶级会话。如果您使用编译器,#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 的缺点是它是一个单独的下载(目前)。
【讨论】:
ocamlc nums.cma t.ml 或 ocamlopt nums.cmxa t.ml.
有几个用于 OCaml 的现代“大数字”库,都是关于 GNU MP 的接口:
ZArith 更好有两个原因:
malloc() 的正常分配方案相反,后者不太适合函数式编程。【讨论】: