f# - 如何在F#中初始化相互递归记录

标签 f# record recursive-datastructures mutual-recursion

<分区>

我有两条具有父子关系的记录:

type Parent = 
  { Number: int
    Child: Child }
and Child = 
  { String: string
    Parent: Parent }

我已经尝试使用以下语法初始化它们,但它不起作用:

let rec parent = 
  { Number = 1
    Child = child }
and child = 
  { String = "a"
    Parent = parent }

这导致

parent : Parent = { Number = 1
                    Child = null }
child : Child = { String = "a";
                  Parent = { Number = 1 
                             Child = null } }

如何在不依赖可变字段或事后使用 with 进行复制和更新的情况下初始化它们?

最佳答案

这是初始化它的语法:

let rec parent = 
  { Number = 1
    Child = 
      { String = "a"
        Parent = parent } 
  }

结果是:

parent : Parent = { Number = 1
                    Child = { String = "a"
                              Parent = ... } }

请注意 as described in this answer , 这种语法可能更多的是偶然而不是故意的,并且只适用于简单的自引用(例如将递归值传递给函数)。

关于f# - 如何在F#中初始化相互递归记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49378696/

相关文章:

java - 用 Java 反序列化员工记录

MongoDB:文档、记录和属性之间有什么区别?

java - 递归地使 Java 中的成员对象无效?

f# - 在可区分联合中对结果类型进行编码

list - 对列表列表的操作

c# - 提高 F# map 插入性能

mysql - 如何在MYSQL表中选择DISTINCT Name where Dealer_ID,防止重复记录

haskell - 无限自引用列表

C++ 递归期末考试复习

.net - 通过forge将nuget包添加到fsproj文件中