我正在尝试这个结构:
type Tree<'a> =
| Leaf
| Node of { value:'a ; left:Tree<'a> ; right:Tree<'a> }
但是f#似乎不支持这个(奇怪的)。 但接下来如何使用单独的记录类型执行此操作,然后获取 陷入循环依赖。
答案 0 :(得分:11)
使用关键字and
来处理循环依赖:
type Rec<'a> = { value:'a ; left:Tree<'a> ; right:Tree<'a> }
and Tree<'a> =
| Leaf
| Node of Rec<'a>
答案 1 :(得分:2)
古斯塔沃的回答很好。请注意,如果为记录类型提供第二个参数,则可以将递归限制为Tree
类型:
type Node<'a,'t> = { value : 'a; left : 't; right : 't }
type Tree<'a> =
| Leaf
| Node of Node<'a,Tree<'a>>
let someTree =
Node { value = 1;
left = Leaf;
right = Node { value = 2;
left = Leaf;
right = Leaf }}