2011-11-13 12 views
13

Bir listenin belirli bir alt dizgi/alt liste içerip içermediğini sınamak için bir hile veya bir başlangıç ​​işlevi var mı? Haskell: listenin belirli bir "alt liste" içerip içermediğini sınama

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 

başıma bir yazmak çalıştı, ancak bu önemsiz bir sorundur ve tekerleği yeniden icat etmek istemiyorum.

+7

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

+0

İlk durumda 'xyz' kullandığınız için kasıtlı mıdır? sanki türü [a] -> [a] -> Bool'du ve sanki ikinci durumda [[a]] -> [a] -> Bool'muş gibi mi? Çünkü her ikisinin de kullanımına izin veren bir işlev bulmak oldukça zor olurdu. – sepp2k

+0

@ sepp2k Benim hatam! düzeltildi. – NaN

cevap

28

Data.List sitesinden isInfixOf kullanın.

Parametreler, sizin sorduğunuzdan başka bir yoldur --- genellikle bu işlevi kullanmak için en okunabilir: "worl" `isInfixOf` "hello world" (True değerini döndürür).