Я недавно поигрался со Scala и думал о том, как реализовать в нем универсальную версию быстрой сортировки (просто для лучшего понимания языка)
Я придумал что-то вроде этого
object Main {
def qs[T](a: List[T], f: (T, T) => Boolean): List[T] = {
if (a == Nil) return a
val (l, g) = a drop 1 partition (f(a(0),(_:T)))
qs(l, f) ::: List(a(0)) ::: qs(g, f)
}
def main(args: Array[String]): Unit = {
val a = List(5,3,2,1,7,8,9,4,6)
val qsInt = qs(_: List[Int], (_: Int) > (_: Int))
println(qsInt(a))
}
}
Это не так универсально, как мне хотелось бы, так как я должен явно указать, как упорядочить элементы, а не просто делать что-то вроде
val (l, g) = a drop 1 partition (a(0) >)
Как я могу сказать компилятору, что T нужно только реализовать оператор «больше, чем» для сортировки этой функцией?
Привет