gpt4 book ai didi

F# 中的递归和不变性

转载 作者:行者123 更新时间:2023-12-04 10:07:31 25 4
gpt4 key购买 nike

考虑以下简单示例:

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 }

此定义将导致编译器错误。我的问题如下:有什么方法可以在不诉诸反射或可变字段的情况下进行上述绑定(bind)?

最佳答案

let rec mkChild i = {Value = i; Parent = parent}
and parent = { Children = children }
and children = List.init length mkChild

关于F# 中的递归和不变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21738387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com