Created
February 24, 2021 19:51
-
-
Save psttf/6ab0d8645d974c1eb9714d4bdcdffc87 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// "фиксированная" структура | |
sealed trait BinTree | |
final case class BinNode(t1: BinTree, t2: BinTree) extends BinTree | |
final case class Leaf(v: Int) extends BinTree | |
// в фиксированном варианте возможно только создание простых деревьев, | |
// их структура заранее зафиксирована в определениях BinNode и Leaf | |
BinNode(Leaf(1),BinNode(Leaf(2),Leaf(3))) | |
// к примеру, невозможно создать дерево с необязательными элементами | |
// оно не скомпилируется | |
// BinNode(Option(Leaf(1)),Option(BinNode(Leaf(2),None))) | |
// параметризованная структура | |
sealed trait BinTreeF[A] | |
final case class BinNodeF[A](t1: A, t2: A) extends BinTreeF[A] | |
final case class LeafF[A](v: Int) extends BinTreeF[A] | |
// параметризованный вариант поддерживает как простые деревья | |
BinNodeF(LeafF(1),BinNodeF(LeafF(2),LeafF(3))): BinTreeF[_ <: BinTreeF[_]] | |
// так и другие варианты вложенных конструкций, | |
// следующих общим правилам, определнным в BinNodeF и LeafF | |
// к примеру, деревьев с необязательными узлами (пропусками или "дырами") | |
BinNodeF(Option(LeafF(1)),Option(BinNodeF(LeafF(2),None))): BinTreeF[Option[_ <: BinTreeF[_]]] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment