.net - reduce 和 reduceBack 之间有什么区别吗

标签 .net f#

我正在从 msdn 学习 f# 并查看并尝试 reduce 和 reduce back,我找不到任何区别,签名是相同的
('T -> 'T -> 'T) -> 'T list -> 'T
并且它们都在空列表上抛出相同的错误,那么为什么有 2 个,应该有一些区别

最佳答案

其他人已经解释了差异 - 他们以不同的顺序减少元素。

对于可以与 reduce 一起使用的大多数操作或 reduceBack ,差异实际上并不重要。用更数学的术语来说,如果您的操作是 associative (例如数字运算、最大值、最小值或求和函数、列表连接等)那么两者的行为相同。

您可以很好地看到差异的一个示例是构建一棵树,因为这正好显示了评估的工作原理:

type Tree = 
  | Leaf of int
  | Node of Tree * Tree

[ for n in 0 .. 3 -> Leaf n]
|> List.reduce (fun a b -> Node(a, b))

[ for n in 0 .. 3 -> Leaf n]
|> List.reduceBack (fun a b -> Node(a, b))

这是您得到的两棵树作为结果(但请注意,如果将它们展平,则会得到相同的列表!)
          reduce        reduceBack
-------------------------------------
tree:       /\              /\
           /\ 3            0 /\
          /\ 2              1 /\
         0  1                2  3
-------------------------------------
flat:    0 1 2 3          0 1 2 3

关于.net - reduce 和 reduceBack 之间有什么区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10977762/

相关文章:

f# - F# 项目中的 FsUnit、NUnit 引用

vb.net - F#、Haskell、Scala 和 Visual Basic 或其他函数式编程语言中两个数字文件 i/o 的简单求和

list - 对列表列表的操作

.net - 在同一应用程序中解析对同一 .NET 程序集不同版本的编译时引用

.net - 使用 C# 连接到 Windows 以生成 Windows 7 新功能

.net - 是否应该覆盖实体的 Object.Equals(在 DDD 中)?

c# - 转换RGB方法?

c# - 如何访问 x :Name-property in code - for non FrameworkElement objects?

c# - MediatR 库 : following the DRY principle

用于并发编程的 .NET 语言