Betrachten Sie das folgende einfache Beispiel:Rekursion & Unveränderlichkeit in F #
type Parent = { Children : Child list }
and Child = { Value : int ; Parent : Parent }
let rec children = [ { Value = 0 ; Parent = parent } ]
and parent = { Children = children }
Der F # -Compiler intelligent genug ist richtig, diese rekursive Objekte zu initialisieren, wie
obj.ReferenceEquals(parent, parent.Children.Head.Parent)
Jetzt läuft überprüft werden kann, prüfen die folgende Verallgemeinerung:
let length = 100 // assume arbitrary
let rec children = List.init length (fun i -> { Value = i ; Parent = parent })
and parent = { Children = children }
Diese Definition führt zu einem Compilerfehler oder. Meine Frage ist die folgende: Gibt es eine Möglichkeit, wie ich die obige Bindung machen könnte ohne Rückgriff auf Reflexion oder veränderbare Felder?
Als F # Neuling wäre ich daran interessiert zu wissen, was die praktische Anwendung eines Codeausschnitts wie der oben genannten ist. –
Das Beispiel selbst ist nur eine sinnlose Vereinfachung, die ich zusammen geklopft habe. Das allgemeinere Problem besteht darin, zyklische Instanzen von unveränderlichen Datenstrukturen zu initialisieren. – eirik