È possibile implementare un albero bidirezionale in una classe di casi. Questo sembra che dovrebbe essere facile, ma sto ottenendo perplessoRiferimento bidirezionale con classi di casi
case class Node(name:String, parent:Option[Node], children:List[Node])
voglio aggiungere un bambino (e ottenere una nuova radice) - qualcosa come
def addChild(n:String):Node = {
Node(name, parent, Node(n, Some(this), Nil)::children)
}
ma che non lavoro perché il "genitore" nel bambino non farà più riferimento al Nodo che elenca il bambino da bambino. È possibile con elenchi e classificazioni di casi immutabili?
in base alla risposta data al di sotto
case class Node(name: String, parent:() => Option[Node], children: List[Node]) {
def makeChild(name: String) = {
lazy val newParent:Node = Node(this.name, this.parent, kid :: this.children)
lazy val kid:Node = Node(name,() => Some(newParent), Nil)
newParent
}
}
Prova valutazione pigra del genitore – Dario