FoldRight

object FoldRight {

  def foldRight[A, B](as: List[A], z: B)(f: (A, B) => B): B =
    as match {
      case Nil       => z
      case ::(x, xs) => f(x, foldRight(xs, z)(f))
    }

  def main(args: Array[String]): Unit = {
    println(foldRight(List(1, 2, 3), Nil: List[Int])(::(_, _)))
  }

}
List(1, 2, 3)
时间: 2024-10-12 06:40:42

FoldRight的相关文章

【转】Scala:fold,foldLeft和foldRight区别与联系

原文链接  http://www.iteblog.com/archives/1228 从本质上说,fold函数将一种格式的输入数据转化成另外一种格式返回. fold, foldLeft和foldRight这三个函数除了有一点点不同外,做的事情差不多. 我将在下文解释它们的共同点并解释它们的不同点. 我将从一个简单的例子开始,用fold计算一系列整型的和. 1 val numbers = List(5, 4, 8, 6, 2) 2 numbers.fold(0) { (z, i) => 3   z

第37讲:List的foldLeft、foldRight、sort操作代码实战

其实flodLeft和foldRight就是折叠操作,我让们看下下列的函数 折叠操作 def sum(xs:List[Int]):Int = ( 0 /: xs)(_ +_) def product(xs:List[Int]):Int=( 1 /: xs)(_ *_) (fruit.head /: fruit.tail)(_ + " " + _) //用空格连接列表中每个元素 列表排序 sort println(List(1,-4,3,2,6).sortWith(_<_))//L

scala - 从合并两个Map说开去 - foldLeft 和 foldRight 还有模式匹配

开发中遇到需求:合并两个Map集合对象(将两个对应KEY的值累加) 先说解决方案: ( map1 /: map2 ) { case (map, (k,v)) => map + ( k -> (v + map.getOrElse(k, 0)) ) } 这特么什么鬼  (╯‵□′)╯""┻━┻☆))>○<) ......莫急,且听我慢慢道来......... 首先: Scala中现有的合并集合操作不能满足这个需求 . 注意合并后的结果a的G02的值其实是被覆盖掉了.

Scala深入浅出实战经典之 List的foldLeft、foldRight、sort操作代码实战

Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy   访问密码 45e2 以下为第37讲List的foldLeft.foldRight.sort操作代码实战 package com.parllay.scala.dataset /** * Created by richard on

scala foldLeft foldRight 简写

http://blog.csdn.net/oopsoom/article/details/23447317 def /:[B](z: B)(op: (B, A) => B): B = foldLeft(z)(op) def :\[B](z: B)(op: (A, B) => B): B = foldRight(z)(op)

问题:计算foldRight(1)(_-_) 与foldLeft(1)(_-_)值不一样

List(1,2,3,4)问题:计算foldRight(1)(_-_) 与foldLeft(1)(_-_)值不一样首先看foldRight(1)(_-_)计算过程((( (1-1)-2)-3)-4) 也就是等价与1-1-2-3-4=-9(从左往右减)然而foldLeft过程是: List(1,2,3,4): 4 - 1 = 33 - 3 = 02 - 0 = 21 - 2 = -1(答案-1)注意第一列他是倒着减的,也就是(x-y)转换成(y-x)下面是源码.可以参照理解def foldRigh

从合并两个Map说开去 - foldLeft 和 foldRight 还有模式匹配

开发中遇到需求:合并两个Map集合对象(将两个对应Key的值累加) 先说解决方案: ( map1 /: map2 ) { case (map, (k,v)) => map + ( k -> (v + map.getOrElse(k, 0)) ) } 首先: Scala中现有的合并集合操作不能满足这个需求 . 注意合并后的结果a的G02的值其实是被覆盖掉了.. 然后: 说说那个表达式中(a /: b)( ... ) 这部分是什么鬼.这个其实是scala简化的foldLeft函数. 先看foldL

Product in foldRight

object ProductFolderRight { def product(ld: List[Double]): Double = { def loop(ls: List[Double], acc: Double): Double = ls match { case Nil => acc case 0.0 :: t => 0.0 case h :: t => h * loop(t, acc) } loop(ld, 1.0) } def main(args: Array[String]

FoldLeftByFoldRight

object FoldLeftByFoldRight { def foldLeft[A, B](l: List[A], z: B)(f: (B, A) => B): B = FoldRight.foldRight(Reverse.reverse(l), z)((a: A, b: B) => f(b, a)) def main(args: Array[String]): Unit = { println(foldLeft(List("1", "2", &q