2016-04-13 2 views
0

私はスカラーにバイナリツリーを書き込もうとしています。ここに私の定義は私のBinaryTree.apply方法でScala:要素シーケンスの折り畳みを使用してバイナリツリーを作成しようとすると、パラメータ値が指定されていません

sealed trait Tree[+T] 
final object Empty extends Tree[Nothing] 
final case class Leaf[A](value: A) extends Tree[A] 
final case class Branch[A](elem: A, left: Tree[A], right: Tree[A]) extends Tree[A] 


object BinaryTree { 

    def insert[ A : Ordering] (t : Tree[A])(implicit elem : A): Tree[A] = { 
    val order = implicitly[Ordering[A]] 
    t match { 
     case Empty => Leaf(elem) 
     case Leaf(x) if (elem == x) => t 
     case Leaf(x) if (order.lt(elem, x)) => new Branch(elem, Empty, new Leaf(x)) 
     case Leaf(x) => new Branch(elem, new Leaf(x), Empty) 
     case Branch(x, left, right) if (elem == x) => t 
     case Branch(x, left, right) if (order.lt(elem, x)) => new Branch(x, insert(left), right) 
     case Branch(x, left, right) => new Branch(x, left, insert(right)) 
    } 
    } 

    def apply[A: Ordering](as: A*): Tree[A] = 
    as.tail.foldLeft[Tree[A]](Leaf(as.head))((t, elem) => BinaryTree.insert(t)(elem)) 
} 

ている私は、次のエラー

"Unspecified value parameters: elem : A" 

ないことは、私が行方不明です何を意味することになっているかわからを取得します。誰でも助けてください。

+0

私は暗黙のキーワードを挿入から取り除き、挿入[A:Ordering](t:Tree [A])(elem:A)として書くと、エラーを取り除いているようです。 –

答えて

0

コンテキストバインドと暗黙的なパラメータを使用すると、コンテキストバインドを含むすべてのパラメータが1組のパラメータセットを末尾に持つようになります。

だからあなたinsert署名:

def insert[A: Ordering] (t: Tree[A])(implicit elem: A) 

は次のようになります。

def insert(t: Tree[A])(implicit o: Ordering[A], elem: A) 

それはあなたがinsertを呼び出すときにoelemパラメータを渡すか、それらの両方を渡すべきではないのいずれかを意味します。

関連する問題