【发布时间】:2012-10-24 10:18:12
【问题描述】:
如果第一个元组的第二个元素与第二个元组的第一个元素相同,我的作业任务是将两个元组分组到一个列表中。那么,如果第一个元组是(a, b),第二个是(b, c),则必须将元组(a, c)添加到结果列表中。
我编写了第一个函数,它使用一个元组获取元素,第二个列表包含许多元组,然后将每个元素与每个元素进行比较。
这个工作正常:
c1 = ("a","x")
d1 = [ ("x","b"), ("z","c"), ("x","b"), ("z","c")
, ("x","b"), ("z","c"), ("x","b"), ("z","c") ]
getByOne c1 a1 = filter (/=[])
[ if (fst (last(take n a1))) == (snd c1)
then [((fst c1), (snd (last(take n a1))))]
else [] | n <- [1..(length a1) ] ]
输出:
[ [("a","b")], [("a","b")], [("a","b")], [("a","b")] ]
但问题是我不能将 if then 和 else 语句只放入简单的元组,所以我创建了一个新列表。在这个“解决方法”的最后,我得到了列表中的列表等等。此外,如果输出列表更大,列表中的列表也会更多。
有没有办法只传递元组或空元组,或者我应该以某种方式对这些列表进行分组?
【问题讨论】:
-
但这不是您想要的输出,对吧?你想要什么输出做,我不清楚。
-
好吧,我会尽量自己解决这个任务,只要它是我家庭作业的一部分。再次感谢您的帮助。