【发布时间】:2018-09-23 01:21:42
【问题描述】:
我想合并我的列表,但我需要传入一个虚拟初始值,这就是我想使用“foldr”的原因。
我目前的名单是:
[[(1, "Bob J", 4.0)],[(1, "Bill J", 2.5),(2,"Bill J", 2.7)]]
我想根据他们的名字组合列表,但在组合数字时我还需要做算术。
我当前的代码是:
grp xs = foldr combine xs
where
combine
(x,_,y)
(totalX,_,totalY)
= (totalX+x,_,totalY+fromIntegral x *y)
这会返回一个错误。我希望 totalX 和 totalY 最初为零,这样它就不会影响计算。我该怎么做?
编辑:我希望我的输出采用相同的格式,所以我想要:
[(1,"Bob J", 4.0],(3,"Bill J", 2.6)]
【问题讨论】:
-
您看到的错误是什么?
-
看起来像group similar items in a list 的另一个变体...但我不确定是否可以作为骗子关闭,因为分组步骤似乎已经完成,只剩下组合步骤。即便如此,我仍然可能最终使用我在链接问题中建议的代码,除非这个问题之前的分组以某种方式在比 O(n log n) 时间更好的时间内完成。
-
您只需要
map和map f = foldr ((:) . f) []。 -
@WillNess 这并没有详细说明如何组合元素。
-
@TheInternet small 步骤... OP 会从那个小提示中找到解决方案,或者他们总是可以要求澄清。 :)