使用Custom Operator实现foldRight

时间:2013-11-04 02:38:33

标签: scala

继续开展Functional Programming in Scala练习,我正在努力在foldRight类型上实施IndexedSeq

由于foldRight将使用right associativity进行评估,因此我为模式匹配创建了以下运算符。

object :++ {
  def unapply[T](s: Seq[T]) = s.lastOption.map(last => 
                                                  (last, s.take(s.length - 1)))
}

然后如此实施:

object IndexedSeqFoldable extends Foldable[IndexedSeq] {
  override def foldRight[A, B](as: IndexedSeq[A])(z: B)(f: (A, B) => B): B = {
    def go(bs: Seq[A], acc: B): B = bs match {
        case x :++ xs => go(xs, f(x, acc)) 
        case _ => acc
    }
    go(as, z)
  }

忽略foldRight可以用foldLeft写的事实,我的方法如何保持?

0 个答案:

没有答案