有可能在 Scala 中做这种事情吗?
问问题
1121 次
2 回答
13
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)
}
于 2010-04-22T15:19:04.427 回答
0
是的!
Scala 支持“惰性 vals”作为一种将值的计算推迟到实际使用的方法。Scala 2.8 的大部分库都能够处理延迟定义的集合。
于 2010-04-22T13:13:53.713 回答