Haskell: проверить, содержит ли список определенный «подсписок»

#list #search #haskell #substring #sublist

#Список #Поиск #haskell #подстрока #подсписок

Вопрос:

Есть ли уловка или функция prelude для проверки, содержит ли список определенную подстроку / подсписок?

 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
  

Я пытался написать его самостоятельно, но это тривиальная проблема, и я не хочу изобретать велосипед.

Комментарии:

1. lmhtfy: [a] -> Bool» rel=»nofollow noreferrer»> haskell.org/hoogle/?q =[a] -> [a] -> Bool

2. Намеренно ли вы используете в первом случае, xyz как если бы его тип был [a] -> [a] -> Bool , а во втором случае, как если бы это было [[a]] -> [a] -> Bool ? Потому что было бы довольно сложно найти функцию, которая допускает оба варианта использования.

3. Я просто хотел бы добавить к ответу dave4420, что вы можете найти эти функции через [a] -> Bool» rel=»nofollow noreferrer»> hoogle (isInfixOf — это первое попадание).

Ответ №1:

Используйте isInfixOf из Data.List.

Параметры противоположны тем, которые вы просили — обычно наиболее удобно использовать функцию, подобную этой: "worl" `isInfixOf` "hello world" (возвращает True).