- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚发现 scala(我在 2.12 上)提供了完全不同的 实现。 foldRight 为 不可变列表 和 可变列表 .
不可变列表(List.scala):
override def foldRight[B](z: B)(op: (A, B) => B): B =
reverse.foldLeft(z)((right, left) => op(left, right))
def foldRight[B](z: B)(@deprecatedName('f) op: (A, B) => B): B =
if (this.isEmpty) z
else op(head, tail.foldRight(z)(op))
最佳答案
override
在 List
似乎覆盖了 foldRight
在 LinearSeqOptimized
. LinearSeqOptimized
中的实现
def foldRight[B](z: B)(@deprecatedName('f) op: (A, B) => B): B =
if (this.isEmpty) z
else op(head, tail.foldRight(z)(op))
foldRight
的规范定义完全一样作为普通理论书中的变形记。然而,正如在
SI-2818 中注意到的那样,此实现不是堆栈安全的(对于长列表抛出意外
StackOverflowError
)。因此,它被堆栈安全
reverse.foldLeft
所取代。在
this commit .
foldLeft
是堆栈安全的,因为它是由一个 while 循环实现的:
def foldLeft[B](z: B)(@deprecatedName('f) op: (B, A) => B): B = {
var acc = z
var these = this
while (!these.isEmpty) {
acc = op(acc, these.head)
these = these.tail
}
acc
}
List
中被覆盖。 .它没有解释为什么它没有在其他类中被覆盖。我想这仅仅是因为可变数据结构的使用频率较低,而且无论如何都非常不同(通常在构造不可变数据结构期间用作缓冲区和累加器)。
blame
Github 上每个文件右上角的按钮,因此您可以随时追踪更改的时间、人员和原因。
关于Scala:列表中的不同 foldRight 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49203112/
有人可以告诉我这个函数定义有什么问题吗? 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
我是一名优秀的程序员,十分优秀!