在一个在线类(class)中,有人说 foldLeftfoldRight等效于 的运算符结合和交换 .

其中一名学生坚持认为此类运算符只需要具有关联性。所以这个属性对于函数组合和矩阵乘法等操作应该是正确的。

据我所知,非可交换的关联运算不会产生 foldLeft 的等效结果。和 foldRight除非 z是中性的,并且操作以这样的方式累积,操作数的顺序保持不变。 IMO 在一般情况下,操作必须是可交换的。

list.foldLeft(z)(operation) == list.foldRight(z)(operation) 

所以,对于 foldLeftfoldRight等效应该 operation可同时结合和可交换或者是否足以 operation要联想?

请您参考如下方法:

String连接 ("abc"+ "xyz") 是关联的但不是可交换的,并且 foldLeft/foldRight将初始/零元素放置在结果字符串的两端。如果该零元素不是空字符串,则结果不同。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!