- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么编译器不翻译 Scala
(1,2,3,4,5,6).foldRight(10)(_ * _)
final int[] intArray = new int[]{1,2,3,4,5,6};
int accumulator = 10;
for(int i = intArray.legth - 1; i >=0; i--) {
accumulator = intArray[i] * accumulator;
}
最佳答案
(1, 2, 3, 4, 5, 6)
是一个 6 值元组,它没有 foldRight
,但是 Array(1, 2, 3, 4, 5, 6)
做。ArrayLike
是具有有效元素访问的特征子类索引序列,这意味着它优化了某些方法,包括例如 foldRight
.每个数组都隐式转换为 ArrayLike
的子类特征。从 Scala 主干:
@tailrec
private def foldr[B](start: Int, end: Int, z: B, op: (A, B) => B): B =
if (start == end) z
else foldr(start, end - 1, op(this(end - 1), z), op)
private static java.lang.Object foldr(scala.collection.IndexedSeqOptimized, int, int, java.lang.Object, scala.Function2);
...
Code:
Stack=6, Locals=6, Args_size=5
0: iload_1
1: iload_2
2: if_icmpne 7
5: aload_3
6: areturn
7: aload_0
8: iload_2
9: iconst_1
10: isub
11: aload 4
13: aload_0
14: iload_2
15: iconst_1
16: isub
17: invokeinterface #21, 2; //InterfaceMethod scala/collection/SeqLike.apply:(I)Ljava/lang/Object;
22: aload_3
23: invokeinterface #72, 3; //InterfaceMethod scala/Function2.apply:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
28: astore_3
29: istore_2
30: astore_0
31: goto 0
LineNumberTable:
line 68: 0
line 67: 6
line 69: 7
apply
方法),一般可以做的最好的事情是使用迭代器和非尾递归函数来实现
foldRight
,或者通过构建一个新集合并执行
foldLeft
来反转集合对此(后者已完成,目前)。在所有序列都具有高效随机访问的情况下,此行为将被覆盖和优化。
关于scala - 为什么 foldRight 和 reduceRight 不是尾递归的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4085118/
有人可以告诉我这个函数定义有什么问题吗? 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
我是一名优秀的程序员,十分优秀!