F#:设计或不设计相互可靠的记录类型

F#: To Design or not design with mutually dependably record types

type Tree = { Root: Node }
and Node = { Tree: Tree }
let rec newTree = { Root = newRoot }
and newRoot = { Tree = newTree }

无需为根声明类型。从类型的角度来看,一棵树 一个节点。在 f# 中定义树的规范方式是这样的

type Node = 
   | N of int * Node list // (inner) node
   | L of int  // leaf

let tree = N(3, [L(5); L(7)])

如果您为叶子定义一个单独的案例或简单地使用

,则由您选择
type Node = N of int * Node list

int 是节点数据类型。您将自定义它甚至使用通用的。

我经常使用可变子集合,然后我使用像

这样的记录
type Node = { data: int; mutable children: Node list }

let root = { data=3; children=[] }
root.children <- [{ data=7; children=[] }]