2011-11-13 27 views
13

Czy istnieje sztuczka lub funkcja preludium do sprawdzenia, czy lista zawiera określony podłańcuch/podlistę?Haskell: sprawdź czy lista zawiera określoną "podlistę"

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 

Starałem się napisać na własną rękę, ale jest to trywialny problem i nie chcę wyważać otwartych drzwi.

+7

lmhtfy: http://haskell.org/hoogle/?q=[a]+-%3E+[a]+-%3E+Bool –

+0

Czy jest to zamierzone, że w pierwszym przypadku używasz 'xyz' tak jakby jego typem były "[a] -> [a] -> Bool', aw drugim przypadku tak, jakby były [[a]] -> [a] -> Bool'? Ponieważ trudno byłoby znaleźć funkcję, która pozwala na oba zastosowania. – sepp2k

+0

@ sepp2k Moja wina! poprawione. – NaN

Odpowiedz

28

Użyj isInfixOf z Data.List.

Parametry są odwrotne od zadawanych --- zwykle najlepiej jest użyć funkcji podobnej do tej: "worl" `isInfixOf` "hello world" (zwraca True).