【发布时间】:2019-06-05 11:25:36
【问题描述】:
给定一个已排序的元组列表,返回一个包含元组列表的列表,其中每个元组列表都符合条件:
1) 对于元组列表中的每个 (a,b) 和 (c,d),a == c
2) 每个元组的第二个元素必须是前一个+1,所以对于[(a, y1), (b, y2), (c, y3)] => y2 = y1+1; y3 = y2 + 1
例子:
输入
ex = [(0,2),(1,0),(1,2),(1,3),(1,4),(2,4)]
输出
groupTogether ex = [[(0,2)], [(1,0)], [(1,2),(1,3),(1,4)],[(2,4)] ]
这必须使用折叠来实现。
我的实现:
groupTogether :: [(Integer,Integer)]-> [[(Integer,Integer)]]
groupTogether [] = []
groupTogether pairs@(x:xs) = foldr (\(a,b) acc -> if ( (a == fst(last(last(acc)))) && (b == fst(last(last(acc)))) )
then (a,b) : (last(last(acc)))
else [(a,b)] : ((last(acc)))
) [[]] pairs
我得到的错误:
【问题讨论】:
-
这是一道作业题吗?
-
@PeterHall 这真的重要吗?我发布了我试图解决问题的努力,这不像我只是想要实现而不首先尝试解决它
-
@PeterHall 回答你的问题,不,这不是家庭作业。
-
Official-ish guidelines on asking and answering (potential) homework questions.。确实,这并不重要;如果这是一个好问题,不管它的作业状态如何,它都是一个好问题。
-
@MichaelLitchard 不过,感谢您分享您投反对票的原因,而不仅仅是投反对票。