functional-programming - 折叠左并向右折叠

  显示原文与译文双语对照的内容
0 0

我在试着学会如何使用左折叠和右折叠。 这是我第一次学习函数编程。 我无法理解什么时候使用折叠,什么时候使用折叠右侧。 我觉得这两个函数之间的时间是可以互换的。 例如( 在 Scala 中) 这两个函数:


val nums = List(1, 2, 3, 4, 5)

val sum1 = nums.foldLeft(0) { (total, n) =>
 total + n
}
val sum2 = nums.foldRight(0) {(total, n) =>
 total + n
}

两者产生相同的结果。 我什么时候可以选择一个或者另一个?

时间: 原作者:

0 0

foldLeft和foldRight的嵌套方式不同。


foldleft: (((...) + a) + a) + a
foldright: a + (a + (a + (...)))

由于你使用的函数是添加的,所以它们都给出了相同的结果。 尝试使用减法。

此外,使用折叠( 左/右)的动机不是结果- 在大多数情况下,两者都产生相同的结果。 这取决于你希望你的功能被聚合在哪。

...