2

私はbig_intタイプを扱っています。OCamlのライブラリを調べましたPervasives

例:Int32

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

どうすれば定義できますか?宣言t%?dたい場合はbig_intどれですか?

4

2 に答える 2

10

以下はトップレベルのセッションです。#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の欠点は、(今のところ)個別にダウンロードできることです。

于 2012-05-09T11:33:19.380 に答える
5

OCamlにはいくつかの最新の「ビッグナンバー」ライブラリがあり、GNUMPに関するすべてのインターフェイスは次のとおりです。

  1. 私自身のmlgmpは、libgmp-ocamlとして多くのLinuxディストリビューションに同梱されています。
  2. Bertrand Jeannetのmlgmpidl(注意:mlgmpとmlgmpidlの両方がocamlfindをGmpパッケージとして宣言しているため、奇妙な競合が発生します)。
  3. ZArith

ZArithは、次の2つの理由で優れています。

  1. GNU MPオブジェクトを割り当てる前に、可能な限りマシン整数の計算を実行しようとします。
  2. malloc()関数型プログラミングにはあまり適していない、を介した通常の割り当てスキームとは対照的に、OCamlヒープ内にGNUMPオブジェクトを割り当てます。
于 2013-03-27T17:43:19.710 に答える