Возможно ли сделать this вид вещей в Scala?Lazy Quicksort в Scala
ответ
Да!
Scala поддерживает «lazy vals» как способ отложить вычисление значения до фактического использования. Большая часть библиотеки Scala 2.8 способна работать с лениво определенными коллекциями.
это не отвечает на заданный вопрос. –
def quicksort[A](xs: Stream[A])(implicit o: Ordering[A]): Stream[A] = {
import o._
if (xs.isEmpty) xs else {
val (smaller, bigger) = xs.tail.partition(_ < xs.head)
quicksort(smaller) #::: xs.head #:: quicksort(bigger)
}
}
Это можно сделать с видом, а также, хотя это обязательно будет гораздо медленнее:
def quicksort[A](xs: List[A])(implicit o: Ordering[A]) = {
import o._
def qs(xs: SeqView[A, List[A]]): SeqView[A, Seq[_]] = if (xs.isEmpty) xs else {
val (smaller, bigger) = xs.tail.partition(_ < xs.head)
qs(smaller) ++ (xs.head +: qs(bigger))
}
qs(xs.view)
}
Спасибо, но я хотел бы также увидеть реализацию списка-представлений. – Mahesh
@Mahesh Реализация представления оказывается более жесткой, чем я себе представлял. Я буду продолжать пытаться понять, работает ли что-то. –
@Mahesh Хорошо, проблема была сглажена. Я забыл '.head' на линии конкатенации ... Глупо мне. –
ИМХО, вопрос должен быть самодостаточными. Ссылки для более подробной информации в порядке, но ссылка на две строки haskell-кода здесь не будет слишком большой работой. –