我试图将(Int, Int)
元组列表排序到一个int列表列表中[[Int]]
为什么呢?我发现了很多用例。基本上给出了这样的列表:
[(1,5), (2,3), (3,4), (4,5), (6,7), (7,8)]
我想返回一个列表:
[[1,2,3,4,5],[6,7,8]]
这是我到目前为止所拥有的:
pieces :: [(Int, Int)]
pieces = [(1,5), (2,3), (3,4), (4,5), (6,7), (7,8)]
linkStep :: [[Int]] -> (Int, Int) -> [[Int]]
linkStep (x:xs) (a, b)
| elem a x = (b : x) : xs
| elem b x = (a : x) : xs
| otherwise = (a : b : x) : xs
-- Now I fold the linkStep function over the list
links :: [(Int, Int)] -> [[Int]]
links list = foldl linkStep [[]] list
但是,当我使用links
致电pieces
时,我得到了
links pieces
--[[8,6,7,5,4,2,3,1,5]]
我不确定自己做错了什么。 linkStep
函数应该将结果列表中的元组元素连接到结果中的目标列表。如果元组元素尚未出现在结果列表中,则添加带有元组元素的新列表。但它不起作用......请帮忙!
答案 0 :(得分:1)
我看到了几个问题:
在linkStep
中,您只检查元组元素是否是第一个内部列表的成员。从您的示例来看,您似乎需要检查所有列表,而不仅仅是第一个列表。
在linkStep
的情况下,您始终将a
,b
或a
和b
添加到第一个内部列表中。因此,所有元素最终都会在第一个列表中结束。也许你打算在这里创建一个新列表?但它也可能是考虑其他列表的好地方。
希望这会帮助你取得进步。