- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是看了List.scala对foldRight()
的实现。
override def reverse: List[A] = {
var result: List[A] = Nil
var these = this
while (!these.isEmpty) {
result = these.head :: result
these = these.tail
}
result
}
override def foldRight[B](z: B)(op: (A, B) => B): B =
reverse.foldLeft(z)((right, left) => op(left, right))
foldRight
上调用
List
会导致在调用
theList.reverse.foldLeft(...)
。
List.foldRight
实现
foldLeft
以便利用单个堆栈框架而不是将多个堆栈框架与
foldLeft
一起使用?
最佳答案
foldLeft
是尾递归的,reverse
根本不是递归的:此实现可确保恒定的内存使用率。 foldRight
如果未按照foldLeft
实现,则不是尾部递归的,这使得它对大量数据不安全。
注意:也许有一些方法可以使foldRight
尾递归,但是我能想到的所有方法都需要在列表的末尾附加内容,这意味着要遍历整个列表。如果您仍然要这样做,最好使用foldLeft
并反转结果,这将减少整个列表中的完整迭代次数。
关于scala - 列出foldRight总是使用foldLeft吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19547976/
有人可以告诉我这个函数定义有什么问题吗? def incr[Int](l: List[Int]): List[Int] = l.foldRight(List[Int]())((x,z) => (x
我是使用 Shapeless 的新手,我正在尝试使用 Shapeless 来自动生成类型类并折叠 HList。 我的目标是渲染 HList如 (a, b, c, d)使用 scalaz.Show 的类
我在 Programming in Scala 中阅读了有关折叠技术的信息书并遇到了这个片段: def reverseLeft[T](xs:List[T]) = (List[T]() /: xs) {
虽然经过Functional Programming in Scala ,我遇到了以下代码片段: def foldRight[A](z: => B)(f: (A,=>B) => B):B = unco
我刚刚发现 scala(我在 2.12 上)提供了完全不同的 实现。 foldRight 为 不可变列表 和 可变列表 . 不可变列表(List.scala): override def foldRi
A型水平foldRight工作正常 (getLabelWithValues),以及后续类型级别 map (getValues) 也可以正常工作。如果我将两者结合在一种方法 (getValuesFull
在一个在线类(class)中,有人说 foldLeft和 foldRight等效于 的运算符结合和交换 . 其中一名学生坚持认为此类运算符只需要具有关联性。所以这个属性对于函数组合和矩阵乘法等操作应该
以前,Nicolas Rinaudo回答了我关于 Scala 的 List foldRight Always Using foldLeft? 的问题 目前正在学习Haskell,我的理解是foldRi
我试试这个代码 println(listOf(1, 2, 4).foldRight(0) { total, next -> total - next
我正在使用 libraryDependencies += "com.chuusai"%% "shapeless"% "2.2.4" 目前我有像这样的模型 HList 类型 sealed trait S
我目前正在尝试 Scala 中的东西,试图习惯函数式编程以及再次学习一门新语言(自上次以来已经有一段时间了)。 现在给出一个字符串列表,如果我想将它们合并成一个长字符串(例如 "scala", "is
为什么编译器不翻译 Scala (1,2,3,4,5,6).foldRight(10)(_ * _) 相当于 Java final int[] intArray = new int[]{1,2,3,4
为什么foldLeft拿 f: (B, A) => B 并折叠右取 f: (A, B) => B foldLeft本来可以写成 f: (A, B) => B.我试图理解参数顺序差异的原因。 最佳答案
在经过时Functional Programming in Scala ,我遇到了这个问题: Can you right foldLeft in terms of foldRight? How abo
注意:我使用的是 Scala 2.8——这会是一个问题吗? 为什么我不能像 foldLeft 或 foldRight 一样使用 fold 函数? 在 Set scaladoc它说: The resul
我一直在用 .foldRight() 递归地实现高阶函数。喜欢 any , all , 和 takeWhile作为实践,但 dropWhile一直难以捉摸。 _Collections.kt具有命令式的
这个问题来源于我之前的问题:What does HList#foldLeft() return? 我有这个场景: class Cursor { } trait Column[T] { def r
我正在学习 Scala,并且是函数式编程领域的新手。我看到大多数方法,例如 foldRight、map、filter、reduce ... 总是可以由 foldLeft 编写(由 foldLeft 编
我必须仅使用 foldRight、foldLeft 和 unfold 来实现 Map 函数。这意味着我必须遍历列表中的每个元素并对其应用函数 f。 我已经声明了我自己的列表如下: abstract c
我是一名优秀的程序员,十分优秀!