0

我对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

如果可以的话,请更正它,并给我一些链接,我可以在哪里学习如何在未来解决这类问题。

感谢您的帮助。

此致。

4

3 回答 3

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。我想它有一个很好的(但不幸的是这次令人困惑)解析整数文字的方式。

于 2013-10-31T03:26:21.740 回答
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>
于 2013-10-30T23:06:16.013 回答
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;;
于 2013-10-31T01:31:40.423 回答