2014-05-22 19 views
0

這裏被歸併排序:在合併傳遞一個元組排序

def msort[T](less: (T, T) => Boolean) 
      (xs: List[T]): List[T] = { 
    def merge(xs: List[T], ys: List[T], acc: List[T]): List[T] = 
    (xs, ys) match { 
     case (Nil, _) => ys.reverse ::: acc 
     case (_, Nil) => xs.reverse ::: acc 
     case (x :: xs1, y :: ys1) => 
     if (less(x, y)) merge(xs1, ys, x :: acc) 
     else merge(xs, ys1, y :: acc) 
    } 
    val n = xs.length/2 
    if (n == 0) xs 
    else { 
    val (ys, zs) = xs splitAt n 
    merge(msort(less)(ys), msort(less)(zs), Nil).reverse 
    } 
}             //> msort: [T](less: (T, T) => Boolean)(xs: List[T])List[T] 

我試圖使用定義的元組的比較類型:

val integerSorter = msort[((String, String), Double)]((a._2, b._2) => a._2 < b._2) _ 

但我收到錯誤:

<console>:1: error: not a legal formal parameter 
     val integerSorter = msort[((String, String), Double)]((a._2, b._2) => a._2 < b._2) _ 

如何定義integerSorter,使其接受((String, String), Double)類型的元組?

+1

應該不是你的函數定義是'(A,B)=> a._2

回答

2

你需要你的定義修改爲:

val integerSorter = msort[((String, String), Double)]((a, b) => a._2 < b._2) _