14

識別された共用体を使用して式ツリーを構築しています。以下のコード:

type IntExpression =
    | TrueIsOne of BoolExpression

type BoolExpression =
    | LessThan of IntExpression * IntExpression
    | And of BoolExpression * BoolExpression
    | Or of BoolExpression * BoolExpression
    | Bool of bool

BoolExpressionが定義されていないため、エラーがスローされます。定義を入れ替えると、予想どおりに逆になります(IntExpressionは定義されていません)。

これを回避する方法はありますか?

4

3 に答える 3

23

はい、and相互依存関係を持つタイプ定義をグループ化するために使用します。

type IntExpression =
    | TrueIsOne of BoolExpression

and BoolExpression =
    | LessThan of IntExpression * IntExpression
    | And of BoolExpression * BoolExpression
    | Or of BoolExpression * BoolExpression
    | Bool of bool
于 2010-07-22T12:47:03.150 に答える
9

「and」は通常、相互に依存するタイプに対して機能します。つまり、Mau、クラス、レコード、および相互再帰関数で示されるように、識別された共用体など、すべてのタイプで機能します。

終了しない例:

let rec foo x = bar x
and bar x = foo x
于 2010-07-22T13:35:28.073 に答える
4

おそらくこれはうまくいくでしょう:

type IntExpression =
  ...
and BoolExpression = 
  ...

MSDNのこのページから取得した情報。)

于 2010-07-22T12:46:44.487 に答える