2016-09-26 78 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)) 
    } 

,我需要實現一個名爲right_most函數,接受Tree[A]並返回A。這裏是我的嘗試吧:

​​

,但我得到了以下錯誤:

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編譯器可以爲您推斷出很多東西。所以,這樣做

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

你得到編譯錯誤,因爲你使用像三元組(tuple)f2參數。相反,您需要像這樣的函數參數((a, b, c) => c)

+0

f2的函數參數是一個元組嗎?那麼怎麼來得到這樣的答案:A = fold_tree((x:A)=> x)((v:Tuple3 [A,A,A])=> v ._3)(t)' 不能通過以及 –

+0

@VarunPatro ...函數參數不能用作元組 – pamu

相關問題