我的作业任务是如果第一个元组的第二个元素与第二个元组的第一个元素相同,则将两个元组分组到一个列表中。然后,如果第一个元组是(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 语句只放入简单的元组,所以我创建了一个新列表。在这个“解决方法”的最后,我得到了列表中的列表等等。此外,如果输出列表更大,列表中的列表也会更多。
有没有办法只传递元组或空元组,或者我应该以某种方式对这些列表进行分组?