我尝试合并两个元组列表x
和y
。基本上我有这些清单:
[("hello", "hi"), ("foo", "baz"), ("this", "that")]
--and
[("foo", "bar"), ("hello", "world"), ("goo", "boo")]
--the result should be
[("hello", "world"), ("foo", "bar"), ("this", "that")]
到目前为止我写过这个:
merge :: (Eq a) => [(a, b)] -> [(a, b)] -> [(a, b)]
merge [] _ = []
merge _ [] = []
merge (x:xs) (y:ys)
| fst x == fst y = (fst y, snd y) : merge xs ys
| otherwise = (fst x, snd x) : merge xs ys
此解决方案的问题在于它仅合并相同的索引。如何有效地迭代第二个列表并将其合并到第一个列表?
答案 0 :(得分:1)
现在,如果otherwise
子句不匹配,您的代码会丢弃x
和y
。它应该尝试将x
与ys
的其余部分合并。一些提示:[x]
是一个可以传递给merge
的列表,如果你能想出一种分解和克服问题的方法,你可以用++
连接一对列表。
正确的解决方案将涉及组合不同步骤的结果,当您开始这样做时,有效的方法将是尾递归。