の労働組合のためのScalaの再帰は週3、私はコーセラのマーティン・オーダーズキーのビデオ講義で見てきたバイナリツリーの実装です:概説基準に従うバイナリ木 - ここでは木
abstract class IntSet
{
def incl(x: Int): IntSet
def contains(x: Int): Boolean
def union(other: IntSet): IntSet
}
object Empty extends IntSet
{
def contains(x: Int): Boolean = false
def incl(x: Int): IntSet = new NonEmpty(x, Empty, Empty)
def union(other: IntSet): IntSet = other
override def toString = "."
}
class NonEmpty(elem: Int, left: IntSet, right: IntSet) extends IntSet
{
def contains(x: Int): Boolean =
if (x<elem) left contains x
else if (x > elem) right contains x
else true
def incl(x: Int): IntSet =
if (x<elem) new NonEmpty(elem, left incl x, right)
else if (x > elem) new NonEmpty(elem, left, right incl x)
else this
def union(other: IntSet): IntSet =
((left union right) union other) incl elem
override def toString = "{" + left + elem + right + "}"
}
だから、空と空ではありませんIntSetによって呼び出されます。私が興味を持っているのは、NonEmptyクラスのunionメソッドです。私はそれがどのように機能するのか理解したいと思います。
私は私の思考プロセスを説明するには、以下の小さな描写を作っていますが、無限ループがあるかのように見える私に
を。税込E3
- :しかし、私はどこか下の評価ミスを犯したことを一定以上にしていますEU R_1)税込E3
- 2.
- 3.
- 2. など など