我的num
号码存在问题。
我想归因
let one = num_of_int 1
let zero = num_of_int 0
所以我打开num
库
open Num
当我想实现它时出错。
# open Num
# let one = num_of_int 1
# let zero = num_of_int 0;;
File "", line 2, characters 21-22:
Error: This expression has type Num.num
but an expression was expected of type int
如果可以的话请纠正,并给我一些链接,以便我在将来可以学习如何解决这类问题。
谢谢你的帮助。答案 0 :(得分:2)
您描述的行为不是官方的OCaml之一。所有最新版本的官方OCaml都接受您的问题代码。
$ ocaml nums.cma
OCaml version 4.01.0
# open Num
let one = num_of_int 1
let zero = num_of_int 0;;
val one : num = Int 1
val zero : num = Int 0
#
我猜您使用的是变体,可能是TryOCaml。我想它解析整数文字有一个很好的(但不幸的是令人困惑)。
答案 1 :(得分:1)
在最近的OCaml中,似乎如果打开Num模块,则1
已被解释为Num。你不需要转换它。这对我来说似乎很神奇,但我在try.ocamlpro.com实践中观察到了它。
Welcome to TryOCaml (v. 4.01.0)
# open Num;;
# 1;;
- : Num.num = Num 1
通常我不会打开Num模块。普及存在许多冲突。也许是当地人开放的:
let open Num in <expr>
答案 2 :(得分:0)
我理解这一点,但我需要将其更改为在程序的其余部分使用。要计算+ - 100位数的大数字,我只需要'num'
open Num
let one = num_of_int 1
let zero = num_of_int 0
let rec silnia n =
if n < 2
then one
else (num_of_int n) */ silnia(n-1)
let rec newton n k =
silnia n // (silnia k */ silnia (n-k))
let bell = Array.make 101 zero;;
bell.(0) <- one;;
bell.(1) <- one;;
let i = ref 2
let k = ref 0
let x = ref zero
let suma = ref zero
let n = ref 100
if !n != 0 || !n != 1 then
while !i <= !n do
while !k <= (!i-1) do
x := newton (!i-1) !k;
suma := !suma +/ (!x */ bell.(!k));
k := !k + 1
done;
bell.(!k) <- (!suma);
suma:= zero;
k:=0;
i:= !i + 1;
done;;