Как использовать функцию фильтра в Haskell?

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

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

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

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

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

Ответы

Ответ 1

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

фильтр p xs.

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

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

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

isEven n = n `mod` 2 == 0

evenListNumbers xs = filter isEven xs

evenListNumbers [1,2,3,4]

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

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

Ответ 2

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

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