Рассмотрим следующий упрощенный пример:Рекурсия и Неизменность в 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