Haskell:测试列表是否包含特定的“子列表”

14

有没有什么技巧或前置函数可以测试一个列表是否包含特定的子字符串/子列表?

xyz :: [a] -> [a] -> Bool
xyz "hello world" "worl" -> True
xyz [1,2,3,4,5,6,7,8,1,2,3,4,5] [7,8,1] -> True

我试图自己写一个,但这是一个琐碎的问题,我不想重复造轮子。


7
lmhtfy: http://haskell.org/hoogle/?q=[a]+-%3E+[a]+-%3E+Bool这是一个链接,它指向 Haskell 的 Hoogle 搜索引擎。查询参数是 [a] -> [a] -> Bool,表示搜索函数类型为接受两个列表作为输入并输出布尔值的函数。 - Sjoerd Visscher
你在第一个案例中使用 xyz 时,是否有意将其类型视为 [a] -> [a] -> Bool,而在第二个案例中则将其视为 [[a]] -> [a] -> Bool?因为很难找到一种函数可以同时允许这两种用法。 - sepp2k
1
我想补充dave4420的答案,你可以通过hoogle找到这些函数(isInfixOf是第一个命中的函数)。 - Andre
1个回答

30

使用Data.List中的isInfixOf函数。

参数的顺序与您要求的相反--通常最可读的方法是像这样使用该函数:"worl" `isInfixOf` "hello world" (返回True)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接