mav*_*vnn 14 recursion f# mutual-recursion discriminated-union
我正在使用受歧视的联合构建表达式树.以下代码:
type IntExpression =
| TrueIsOne of BoolExpression
type BoolExpression =
| LessThan of IntExpression * IntExpression
| And of BoolExpression * BoolExpression
| Or of BoolExpression * BoolExpression
| Bool of bool
Run Code Online (Sandbox Code Playgroud)
抛出错误,因为未定义BoolExpression.交换定义只会导致反向(IntExpression未定义),如您所料.
有没有解决的办法?
Mau*_*Mau 23
是的,用于使用and相互依赖关系对类型定义进行分组:
type IntExpression =
| TrueIsOne of BoolExpression
and BoolExpression =
| LessThan of IntExpression * IntExpression
| And of BoolExpression * BoolExpression
| Or of BoolExpression * BoolExpression
| Bool of bool
Run Code Online (Sandbox Code Playgroud)
"和"通常适用于具有相互依赖关系的类型.也就是说,它适用于所有类型,例如被区分的联合,如Mau所示,类,记录和相互递归的函数.
非终止示例:
let rec foo x = bar x
and bar x = foo x
Run Code Online (Sandbox Code Playgroud)