Как использовать функцию фильтра в Haskell? - PullRequest
15 голосов
/ 03 января 2012

У меня есть программа на haskell для вывода списка целых чисел из [1..n] на основе ввода n.Я хочу отфильтровать определенные числа на основе условия из него и отобразить в виде списка.где и как я могу использовать функцию / условие фильтра?

Согласно документации на haskell:

filter :: (a -> Bool) -> [a] -> [a]

фильтр, примененный к предикату и списку, возвращает список тех элементов, которые удовлетворяютпредикат;то есть

filter p xs = [ x | x <- xs, p x]

Ответы [ 2 ]

25 голосов
/ 03 января 2012

Вы поняли, в значительной степени.Таким образом, остальная часть сделки разрабатывает функцию предиката для вашего списка.Предполагая, что у вас уже есть список с именем xs и функцией предиката p, все, что вам нужно сделать, это

filter p xs.

Часто вы увидитеp определяется как анонимное или лямбда-выражение, например:

filter (\ n -> n `mod` 2 == 0) xs.

Itне является обязательным, и может быть полезно для начинающих определять именованные функции.

isEven n = n `mod` 2 == 0

evenListNumbers xs = фильтр isEven xs

evenListNumbers [1,2,3,4]

Что это [2,4].

Таким образом, функция предиката для данного фильтра списка принимаетэлемент списка и возвращает логическое значение.Если это правда, элемент сохраняется (или добавляется в итоговый список), а если он ложный, он передается.

2 голосов
/ 03 января 2012

Итак, вы преобразуете это условие в предикат (функция, возвращающая Bool) и используете его для фильтрации чисел.

Например, если вам нужно выбрать только нечетные числа, которые вы можете использовать filter odd [1..n]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...