Grałem około z Scala niedawno i myślał o tym, jak wdrożyć generycznej wersji quicksort w nim (tak, aby uzyskać lepsze wyczucie języka)Ogólny quicksort w Scala
wymyśliłem coś takiego
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))
}
}
to nie jest tak jak chciałem generic to być, ponieważ muszę jednoznacznie stwierdzić, jak zamówić elementy, a następnie po prostu robi coś
val (l, g) = a drop 1 partition (a(0) >)
Jak mogę powiedzieć kompilatorowi, że T potrzebuje tylko operatora większego niż do sortowania według tej funkcji?
Pozdrowienia
Dzięki dużo! Świetna odpowiedź :) – raichoo
Bez problemu. Spójrz na qs impl na wikipedia również. Może okaże się, że jeden lepszy i bardziej intuicyjny niż mój;) – Schildmeijer