0

型宣言の利点は何ですか:

type xxx
and yyy

以上

type xxx
type yyy

あるものが別のものに依存しているという意味論を与えるには?

私はOcamlWin4.0を使用しており、コードはC:\OCaml\lib\hashtbl.ml

  type ('a, 'b) t =
  { mutable size: int;                        (* number of entries *)
    mutable data: ('a, 'b) bucketlist array;  (* the buckets *)
    mutable seed: int;                        (* for randomization *)
    initial_size: int;                        (* initial array size *)
  }

and ('a, 'b) bucketlist =
    Empty
  | Cons of 'a * 'b * ('a, 'b) bucketlist

コンパイルします。に変更するandtype

type ('a, 'b) t =
  { mutable size: int;                        (* number of entries *)
    mutable data: ('a, 'b) bucketlist array;  (* the buckets *)
    mutable seed: int;                        (* for randomization *)
    initial_size: int;                        (* initial array size *)
  }

type ('a, 'b) bucketlist =
    Empty
  | Cons of 'a * 'b * ('a, 'b) bucketlist

同様にコンパイルします。

4

2 に答える 2

3

このandキーワードは、相互再帰的な宣言を定義するときによく使用されます

あなたの例を考えると

type ('a, 'b) t =
    { mutable size: int;                        (* number of entries *)
      mutable data: ('a, 'b) bucketlist array;  (* the buckets *)
      mutable seed: int;                        (* for randomization *)
      initial_size: int;                        (* initial array size *)
    }

type ('a, 'b) bucketlist =
    Empty
  | Cons of 'a * 'b * ('a, 'b) bucketlist

3行目にはError: Unbound type constructor bucketlist20〜39文字の文字が表示されます。ただし、2番目のタイプをとで変更するとエラーが削除されます。

type ('a, 'b) t =
    { mutable size: int;                        (* number of entries *)
      mutable data: ('a, 'b) bucketlist array;  (* the buckets *)
      mutable seed: int;                        (* for randomization *)
      initial_size: int;                        (* initial array size *)
    }

and ('a, 'b) bucketlist =
    Empty
  | Cons of 'a * 'b * ('a, 'b) bucketlist

どちらの場合もコンパイルされる理由を思い付くことができませんが、インタープリターを使用していて、それを閉じるのを忘れた場合、その環境には古いバインディングがあります。
つまり、最初にキーワードを使用してコードを評価した場合は、環境ですでに定義されているものがandなくても、コードを再評価し続けることができます。bucketlist

于 2013-01-29T23:42:18.310 に答える
2

andキーワードは、相互に再帰的な定義を表現するために必要です。例えば、

type t = A | B of u
and  u = C | D of t

andに置き換えると、コンパイルできなくなりますtype。ただし、あなたの例では、その使用は冗長です。

于 2013-01-30T04:48:04.583 に答える