He estado jugando con Scala recientemente y estaba pensando acerca de cómo implementar una versión genérica de la clasificación rápida en el mismo (sólo para obtener una mejor sensación para el idioma)Una clasificación rápida genérica en Scala
me ocurrió algo como esto
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))
}
}
esto no es tan genérico como yo quería que fuera, ya que tengo que indicar explícitamente cómo ordenar los elementos en lugar de simplemente hacer algo como
val (l, g) = a drop 1 partition (a(0) >)
¿Cómo puedo decirle al compilador que T solo necesita implementar el operador mayor que para poder ordenar esta función?
Saludos
Gracias mucho! Gran respuesta :) – raichoo
No hay problema. Echa un vistazo a la qs impl en wikipedia también. Quizás encuentres uno mejor y más intuitivo que el mío;) – Schildmeijer