List 筛选列表中的部分

List 筛选列表中的部分,list,haskell,match,List,Haskell,Match,这是我的问题:我有这样一个列表: [Int] [[([Int], Int)]] 另一个列表如下: [Int] [[([Int], Int)]] 假设列表a看起来像 [2,3,7,4] [([2,3,7,2],1), ([2,3,7,8],3), ([2,3], 2)] 列表“b”看起来像 [2,3,7,4] [([2,3,7,2],1), ([2,3,7,8],3), ([2,3], 2)] 我想首先找出是否有一个列表以2,3,7,4开头,但可以有更多的元素。然后我想匹配以2,3

这是我的问题:我有这样一个列表:

[Int]
[[([Int], Int)]]
另一个列表如下:

[Int]
[[([Int], Int)]]
假设列表a看起来像

[2,3,7,4]
[([2,3,7,2],1), ([2,3,7,8],3), ([2,3], 2)]
列表“b”看起来像

[2,3,7,4]
[([2,3,7,2],1), ([2,3,7,8],3), ([2,3], 2)]
我想首先找出是否有一个列表以2,3,7,4开头,但可以有更多的元素。然后我想匹配以2,3,7开始的列表,依此类推。我想继续,直到我得到比赛。注意,我只想匹配列表“b”中元组的第一个元素,而忽略元组的第二个元素

我尝试使用过滤器,但如果我不想只比较列表的开头,它就无法工作。

如果没有匹配的元素,您希望查找[2、3、7]删除最后一个元素,依此类推

let f xs a = filter (\(xs, _) -> a `isPrefixOf` xs) b ++ f xs (take (length a - 1) a)
然后


显然,你必须检查像“未发现”这样的坏情况,自己试试看

听起来您想使用isPrefixOf:


第二个示例中的列表都没有类型[[Int,Int]]。第一个甚至不解析。b不能包含那个元组,可能,你想要类似[[Int],Int]的东西。对不起,伙计们,编辑掉的错误。现在应该是正确的