Ocaml 如何呈现大屏幕?

Ocaml 如何呈现大屏幕?,ocaml,bignum,Ocaml,Bignum,我正在使用big_inttype。我查看了OCaml的库pervisives 例如:在Int32 let t = 5l Printf.printf "%ld" t 如果我想声明它是一个big\u int,我如何定义t和哪个%?d?下面是一个顶级会话。如果使用编译器,#load指令将成为命令行链接选项: # #load "nums.cma" ;; # let t = Big_int.big_int_of_int 5 ;; val t : Big_int.big_int = <abstr&g

我正在使用
big_int
type。我查看了OCaml的库
pervisives

例如:在
Int32

let t = 5l
Printf.printf "%ld" t

如果我想声明它是一个
big\u 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 = ()
##加载“nums.cma”;;
#设t=Big_int.Big_int_of_int 5;;
val t:Big_int.Big_int=

最后,
Big_int
模块非常陈旧和笨拙。接口可以追溯到caml light,其中模块系统是最基本的。这就是为什么每个函数名都会重复“big_int…”的原因。如果您现在选择的是大整数库,我会推荐它,它既现代又高效。Zarith的缺点是它是一个单独的下载(目前)。

有几个用于OCaml的现代“大数字”库,所有关于GNU MP的接口:

  • 我自己的mlgmp,它作为libgmp-ocaml随许多Linux发行版一起提供
  • Bertrand Jeannet的mlgmpidl(注意:mlgmp和mlgmpidl都向ocamlfind声明自己是Gmp包,因此存在奇怪的冲突)
  • 扎里斯
  • ZArith更好有两个原因:

  • 在分配GNUMP对象之前,它尽可能多地对机器整数执行计算
  • 它在OCaml堆内分配GNU MP对象,这与通过
    malloc()
    的正常分配方案不同,后者不太适合函数式编程

  • 很抱歉提出了这个新问题,但是您如何进行编译的命令行链接?@DrXorile这是一个新问题,如果您将其作为一个大家都能看到的新问题提问,您可以在5分钟内得到答案
    ocamlc nums.cma t.ml
    ocamlopt nums.cmxa t.ml