2016-11-07 3 views
2

I (New to Haskell) хочу найти, присутствует ли слово в строке (строк) или нет. Я видел несколько функций для достижения этой цели, как: элем, isInfixOfнайти слово в строке строк в haskell

Prelude DL> isInfixOf "new" "I am new to Haskell" 
True 

Prelude DL> elem "new" ["I am", "new to", "Haskell"] 
False 

Как я могу реализовать «isInfixOf» на каждой строке в списке строк.

+0

Что такое предполагаемое возвращаемый тип? Список bools, указывающий, является ли строка инфикс каждой строки в списке? – mnoronha

+1

Незначительная стилистическая нота, 'isInfixOf' обычно используется ... ну, инфикс (не потому, что речь идет о инфиксных вещах, а из-за того, как это работает грамматически). Таким образом, вы обычно видите «новый» 'isInfixOf'. Я новичок в Haskell« ''. И в случае ответов вы можете видеть, что он используется как раздел, например. '' any ("new" 'isInfixOf') [...]' ' – luqui

ответ

4

Если вы ожидаете получить истинное:

any (isInfixOf "new") ["I am", "new to", "Haskell too!"] 

Если вы хотите получить список Bool:

map (isInfixOf "new") ["I am", "new to", "Haskell too!"] 
3

Вы можете сделать это путем сопоставления функции isInfixOf над списком Strings как так:

ghci>> map (isInfixOf "new") ["I am", "new to", "Haskell"] 
[False, True, False] 

map оценивает предикат для каждого элемента i n список.

Строительство этого, вы можете использовать другие функции из Data.List, чтобы узнать больше о списке в целом:

ghci>> any (isInfixOf "new") ["I am", "new to", "Haskell"] 
True 
ghci>> all (isInfixOf "new") ["I am", "new to", "Haskell"] 
False