Lazy Quicksort in Scala
在scala中可以做这种事情吗?
		
		
- imho,一个问题应该是独立的。有关更多细节的链接是可以的,但是在这里引用两行haskell代码不会有太多工作。
 
	 
| 12
 3
 4
 5
 6
 7
 
 | 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)
  }
} | 
它也可以用视图来完成,尽管速度肯定会慢得多:
| 12
 3
 4
 5
 6
 7
 8
 
 | 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视图的实现比我最初想象的要困难。我会一直试着看看有没有什么效果。
- @马赫什好了,把问题解决了。我忘了连接线上的.head…愚蠢的我。
- @丹尼尔:我们可以用quicksort[A <% Ordering[A]](xs: List[A]) = {替换第一行吗?
- @Aymen和Ordering不像Ordered那样灵活。除此之外,是的,在第二行去掉import。
- @丹尼尔:我不认为Seqview一号是懒惰的。把一个柜台插进去看看。
- 在哪里可以找到#:::操作员的文档?
- @布莱恩看索引。
- 为什么不在stream.scala(和seqview)中使用这种懒惰的类型(或类似的类型)来实现sorted、sortBy、sortWith等。是吗?是否有任何方法可以只使用库内置函数进行惰性排序?sorted不是"变压器吗?"文档说流"延迟地实现了它的所有Transformer方法",但据我所知,这里似乎不是这样?
- @Brian这不是实现,因为没有人编写它,没有人提交它,也没有人要求它。有人可能会说,sorted是一种变换方法,但我猜想只有变换值被认为是变换值的方法。
 
	 
对!
scala支持"lazy vals",将值的计算推迟到实际使用为止。scala 2.8库中的大部分都能够处理延迟定义的集合。