考虑以下简单的例子:递归和不变性在F#
type Parent = { Children : Child list }
and Child = { Value : int ; Parent : Parent }
let rec children = [ { Value = 0 ; Parent = parent } ]
and parent = { Children = children }
F#编译器是足够聪明,正确初始化这些递归对象,可以通过运行
obj.ReferenceEquals(parent, parent.Children.Head.Parent)
现在被验证,考虑以下概括:
let length = 100 // assume arbitrary
let rec children = List.init length (fun i -> { Value = i ; Parent = parent })
and parent = { Children = children }
该定义将导致编译器错误要么。我的问题是以下几点:有什么办法可以使上述绑定没有诉诸反射或可变领域?
作为一名F#新手,我很想知道上面代码片段的实际应用是什么。 –
这个例子本身就是我拼凑在一起的无意义的简化。更一般的问题是初始化不可变数据结构的循环实例。 – eirik