作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑表达式 E1 = foldl op acc l
和 E2 = foldr op acc l
.op
的一些自然充分条件是什么? , acc
和/或 l
保证 E1
的等价性和 E2
?
一个天真的例子是,如果 op
是恒定的,那么两者是等价的。
我很确定必须存在涉及 op
的交换性和/或关联性的精确条件, 和/或 l
的有限性, 和/或 acc
的中立性.
最佳答案
如果 op
是一个关联操作,acc
是 op
的中性元素, 和 l
是有限的,那么它们是等价的。
确实,foldr
的结果是
(l1 `op` (l2 `op` ... (ln `op` acc)))
foldl
是
(((acc `op` l1) `op` l2) `op` ... ln)
acc
离开,然后重新联系。
acc
不是中性元素,而是
acc
仍然满足较弱的条件
forall x, acc `op` x = x `op` acc
op
是关联的,
l
是有限的,我们再次得到所需的等价。
acc
与一切通勤,并将其从尾部位置“移动”到头部位置,利用关联性。例如。
(l1 `op` (l2 `op` acc))
=
(l1 `op` (acc `op` l2))
=
((l1 `op` acc) `op` l2)
=
((acc `op` l1) `op` l2)
op = const k
它是关联的,但没有中性元素。尽管如此,任何
acc
与一切通勤,所以“常数
op
”的情况是上述充分条件的子情况。
op
有一个中性元素
acc
, 如果我们假设
foldr op acc [a,b,c] = foldl op acc [a,b,c] -- (*)
a `op` (b `op` c) = (a `op` b) `op` c
(*)
适用于所有
a,b,c
,然后
op
必须是关联的。因此,关联性是必要且充分的(当存在中性元素时)。
l
是无限的,
foldl
无论如何总是发散
op,acc
是。如果
op
对第二个参数很严格,
foldr
也发散(即,它返回底部)。
关于haskell - foldl 和 foldr 等价的充分条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47495835/
我是一名优秀的程序员,十分优秀!