在Scala中能否做到这种事情?
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)
}
quicksort[A <% Ordering[A]](xs: List[A]) = {
吗? - Aymensorted
是一个转换方法,但我猜想只有能够转换_值_的方法被认为是转换器。 - Daniel C. Sobral是的!
Scala支持“lazy vals”作为一种推迟计算值直到实际使用的方式。Scala 2.8库的大部分都能够处理延迟定义的集合。