我現在實際上被阻止了大約4個小時。我想要得到一個由int值排序的成對List [String,Int]。功能partiotion工作正常,所以應該bestN,但是當加載到我的解釋器時,我得到:找不到類型的證據參數的隱式值Ordered [T]
<console>:15: error: could not find implicit value for evidence parameter of type Ordered[T]
對我的謂詞。有人看到問題是什麼嗎?我此刻真的絕望了......
這是代碼:
def partition[T : Ordered](pred: (T)=>Boolean, list:List[T]): Pair[List[T],List[T]] = {
list.foldLeft(Pair(List[T](),List[T]()))((pair,x) => if(pred(x))(pair._1, x::pair._2) else (x::pair._1, pair._2))
}
def bestN[T <% Ordered[T]](list:List[T], n:Int): List[T] = {
list match {
case pivot::other => {
println("pivot: " + pivot)
val (smaller,bigger) = partition(pivot <, list)
val s = smaller.size
println(smaller)
if (s == n) smaller
else if (s+1 == n) pivot::smaller
else if (s < n) bestN(bigger, n-s-1)
else bestN(smaller, n)
}
case Nil => Nil
}
}
class OrderedPair[T, V <% Ordered[V]] (t:T, v:V) extends Pair[T,V](t,v) with Ordered[OrderedPair[T,V]] {
def this(p:Pair[T,V]) = this(p._1, p._2)
override def compare(that:OrderedPair[T,V]) : Int = this._2.compare(that._2)
}
編輯:第一個功能通過應用謂詞每個成員把一個表分爲二,bestN函數返回一個列表中最低的n個成員列表。和類是有做對的可比性,在這種情況下,我想你做的是:
val z = List(Pair("alfred",1),Pair("peter",4),Pair("Xaver",1),Pair("Ulf",2),Pair("Alfons",6),Pair("Gulliver",3))
這個給定的名單我想例如使用:
bestN(z, 3)
結果:
(("alfred",1), ("Xaver",1), ("Ulf",2))
好了,有了這個代碼,我得到一個奇怪的編譯錯誤: '發現:(U,V)' '要求:(U,V)' '高清CMP(A:(U,V) ,b:(U,V))=((a:OrderedPair [U,V])<(b:OrderedPair [U,V]))' – Theolodis
好吧,得到了錯誤:) – Theolodis