2016-12-01 10 views
0

まず私は、バイナリツリーの型宣言を持っている:Scalaの関数型プログラミングオペレータ:::

sealed trait BT[+A] 
case object Empty extends BT[Nothing] 
case class Node[+A](elem:A, left:BT[A], right:BT[A]) extends BT[A];; 

そしてさらに、私はオペレータを探してこの謎とINORDERトラバーサル「:::」のためにこのコードを持っています。

この演算子 ":::"はこのコードではどういう意味ですか?

def inorder[A](tree: BT[A]): List[A] = { 
    tree match { 
    case Node(v,l,r) =>(inorder(l)) ::: (v::(inorder(r))) 
    case Empty => Nil 
    } 
} 

答えて

4

scala.collection.immutable.Listの方法であり、リストを連結するものです。例:

scala> List(1,2) ::: List(3,4,5) 
res0: List[Int] = List(1, 2, 3, 4, 5) 

API documentationを参照してください。

メソッド名の末尾が:の場合、Scalaは右側の値のメソッドを呼び出し、左側の値を引数として渡します(名前が:で終わらない他のメソッドでは、それは別の方法です)。 APIドキュメントでは、:::メソッドがList(3,4,5)で呼び出され、List(1,2)が引数として指定されているため、「このリストの前に指定されたリストの要素を追加します。したがってList(3,4,5)の前にList(1,2)が追加されています。