2016-09-26 7 views
0

に無名関数にタプルタイプを指定するには、次のように私はmap_treeと呼ばれる機能があります。どのようにScalaの

def fold_tree[A,B](f1: A => B) (f2: (A,B,B) => B) (t: Tree[A]) : B = t match { 
    case Leaf(value) => f1(value) 
    case Node(value , l, r) => f2 (value, fold_tree (f1) (f2) (l), fold_tree (f1) (f2) (r)) 
    } 

と私はTree[A]を取り、Aを返すright_mostと呼ばれる機能を実装する必要があります。ここでの私の試みです:

​​

は、しかし、私は、次のエラーを取得:発見し、同じように必要な

found : ((A, A, A)) => A 
required: (A, A, A) => A 
    fold_tree ((x: A) => x) ((v: (A, A, A)) => v._3) (t) 
              ^
one error found 

は、私には見えます。その後、何がエラーですか?さらに、匿名関数でタプルの型を指定するにはどうすればよいですか?なぜ関数シグネチャにタプル型を指定する必要があるのですか?それをスケーラで推論することはできませんか?

+0

'fold_tree'の定義は何ですか? – Rumoku

+0

申し訳ありませんが、誤ってmap_treeが含まれています。 fold_treeに置き換えました。 –

答えて

1

Scalaコンパイラは、多くのことを推測できます。そう、あなたはトリプレットのようなF2のparams(タプル)を使用していたので、あなたは、コンパイルエラーを得た。この

def right_most [A](t:Tree[A]) : A = 
    fold_tree[A, A](_) ((_, _, c) => c) (t) 

を行います。代わりに、このような関数のパラメータが必要です((a, b, c) => c)

+0

f2の関数パラメータがタプルの権利ですか?だから来る 'def right_most [A](t:ツリー[A]):A = fold_tree((x:A)=> x)(v:Tuple3 [A、A、A])=> v ._3)(t) ' も渡されません –

+0

@VarunPatro ... function paramsはタプルとして使用できません – pamu

関連する問題