我正在尝试使用 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/