ocaml - 错误: Reference to undefined global `Num'

标签 ocaml bignum

我正在尝试使用 OCaml 中的 Num 模块(大数字和大分数)。有些事情似乎有效,而另一些事情似乎不起作用,而且我无法生成一个完整的示例。例如:

# Num.Int(234);;
- : Num.num = Num.Int 234
# Num.mult_num;;
Characters -1--1:
  Num.mult_num;;
Error: Reference to undefined global `Num'

我可以举一个两个大数相乘的简单例子吗?

Num 的引用是 here .

最佳答案

如果顶层已经启动,您可以动态加载库:

# #load "nums.cma";;
# Num.mult_num;;
- : Num.num -> Num.num -> Num.num = <fun>

另一种可能性(适用于所有第三方库并为您管理路径和依赖项)是使用 ocamlfind。为此,发出

#use "topfind";;

(或者最好将其放入您的 ~/.ocamlinit 文件中)。要加载库,只需执行

# #require "num";;
/usr/lib/ocaml/nums.cma: loaded
/home/user/.opam/system/lib/num-top: added to search path
/home/user/.opam/system/lib/num-top/num_top.cma: loaded
/home/user/.opam/system/lib/num: added to search path

(如果 ocamlfind - 因此 topfind - 不可用,请使用 opam 安装它。)

这是一个乘法的例子:

# Num.(num_of_int 30 */ num_of_int 1234);;
- : Num.num = Num.Int 37020

构造Num.(e)let open Num in e的简写,并且可以使用不带前缀的Num函数在e中。这是阶乘的定义:

# let rec fac n =
    let open Num in
    if n =/ Int 0 then Int 1 else n */ fac (n -/  Int 1);;
val fac : Num.num -> Num.num = <fun>

你可以尝试一下

# fac Num.(Int 100);;
- : Num.num = Num.Big_int <abstr>

如果您使用#require,它会为Num值安装一个 pretty-print ,因此之前的交互如下所示:

# fac Num.(Int 100);;
- : Num.num =
<num 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000>

这更容易阅读!

关于ocaml - 错误: Reference to undefined global `Num' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30830179/

相关文章:

ocaml - camlimages - fatal error : exception Failure ("unsupported")

ocaml - OCaml 2 和 3 之间的差异

functional-programming - 如何在 OCaml 中以功能方式使用支持就地修改的字段更新记录?

java - 为什么 BigInteger 除法时要减去小数位数,乘法时要加上小数位数?

c - C 中具有大数字(即 1000 位)的斐波那契函数

emacs - 如何下载和安装 OCaml 的 Emacs?

ocaml - uint16_t 和 uint8_t 的等价物是什么

c++ - 计算一个数的大幂

binary - 如何避免 Coq nats 中的堆栈溢出或段错误?

c - 二进制补码形式的 64 位负整数