Types F歧视联盟中的快速记录
我试着这样做:Types F歧视联盟中的快速记录,types,f#,record,Types,F#,Record,我试着这样做: type Tree<'a> = | Leaf | Node of { value:'a ; left:Tree<'a> ; right:Tree<'a> } 类型树} 但f#似乎并不支持这一点(奇怪)。 但是如何使用单独的记录类型来实现这一点呢 陷入循环依赖。使用关键字和处理循环依赖: type Rec<'a> = { value:'a ; left:Tree<'a> ; right:Tree<'a>
type Tree<'a> =
| Leaf
| Node of { value:'a ; left:Tree<'a> ; right:Tree<'a> }
类型树}
但f#似乎并不支持这一点(奇怪)。
但是如何使用单独的记录类型来实现这一点呢
陷入循环依赖。使用关键字
和
处理循环依赖:
type Rec<'a> = { value:'a ; left:Tree<'a> ; right:Tree<'a> }
and Tree<'a> =
| Leaf
| Node of Rec<'a>
type Rec}
和树
古斯塔沃的回答很好。请注意,如果为记录类型提供第二个参数,则可以将递归限制为树
类型:
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 }}
type Node={value:'a;left:'t;right:'t}
当你发现自己想说“奇怪”的时候,大多数时候你真正的意思是“我以前没见过这个”。想想看,这就是“奇怪”的技术定义,尽管它最近获得了更多的“错误”含义。谢谢,我不知道这里的“和”关键字。