在一个在线类(class)中,有人说 foldLeft和 foldRight等效于 的运算符结合和交换 .
其中一名学生坚持认为此类运算符只需要具有关联性。所以这个属性对于函数组合和矩阵乘法等操作应该是正确的。
据我所知,非可交换的关联运算不会产生 foldLeft 的等效结果。和 foldRight除非 z是中性的,并且操作以这样的方式累积,操作数的顺序保持不变。 IMO 在一般情况下,操作必须是可交换的。
list.foldLeft(z)(operation) == list.foldRight(z)(operation)
所以,对于
foldLeft和
foldRight等效应该
operation可同时结合和可交换或者是否足以
operation要联想?
请您参考如下方法:
String连接 ("abc"+ "xyz") 是关联的但不是可交换的,并且 foldLeft/foldRight将初始/零元素放置在结果字符串的两端。如果该零元素不是空字符串,则结果不同。




