Шаг 102.
Основы языка Haskell. Функционалы (функции высшего порядка). Функционалы из Prelude. Функционалы-компараторы

    На этом шаге мы рассмотрим функционалы этого типа.

    Перечислим функционалы этой группы.

    1. Функционал, возвращающий список элементов исходного списка, для которых заданный предикат является истинным:

   filter:: (a -> Bool) -> [a] -> [a]
   filter p lst
Например:
   > filter null [[2],[3,3],[],[5,4],[],[2]]
   [[],[]]

   > filter (elem 3) [[2],[3,3],[],[5,4,3],[],[3]]
   [[3,3],[5,4,3],[3]]

   > filter (0>) [2,3,4,(-4),9,(-1)]
   [-4,-1]

    2. Функционал, возвращающий список элементов из начала исходного списка до тех пор, пока они удовлетворяют заданному предикату:

   takeWhile:: (a -> Bool) -> [a] -> [a]
   takeWhile p lst
Например:
   > takeWhile (0<) [2,3,4,-4,9,-1,11,21]
   [2,3,4]

   > takeWhile (elem (-2)) [[1,-2,2],[-2],[4],[-2,-2]]
   [[1,-2,2],[-2]]

   > takeWhile (elem 7) [[2,3],[3,7,6],[9,7]]
   []

    3. Функционал, удаляющий элементы из начала списка до тех пор, пока они удовлетворяют заданному предикату (англ. drop - отбрасывание):

   dropWhile:: (a -> Bool) -> [a] -> [a]
   dropWhile p lst
Например:
   > dropWhile (0<) [2,3,4,-4,9,-1,11,21]
   [-4,9,-1,11,21]

   > dropWhile (elem (-2)) [[1,-2,2],[-2],[4],[-2,-2]]
   [[4],[-2,-2]]

    4. Функционал, разделяющий исходный список на два и возвращающий пару, содержащую полученные списки. В первый список поступают элементы из начала исходного списка, которые удовлетворяют заданному предикату, во второй - оставшиеся элементы исходного списка:

   span:: (a -> Bool) -> [a] -> ([a],[a])
   span p lst
Например:
   > span (0>=) [-3,-4,1,0,-2,3,4,10,-2]    > span null [[],[],[]]
   ([-3,-4],[1,0,-2,3,4,10,-2])             ([[],[],[]],[])

   > span (0>=) [3,4,1,0,-2,3,4,10,-2]
   ([],[3,4,1,0,-2,3,4,10,-2])
5. Функционал, разделяющий исходный список на два и возвращающий кортеж из полученных списков. Точкой деления исходного списка является первый элемент, для которого заданный предикат принимает истинное значение:
   break:: (a -> Bool) -> [a] -> ([a], [a])
   break p lst

    В том случае, если предикат не выполняется ни для одного из элементов, то первым элементом кортежа является исходный список, а вторым - пустой список. Например:

   > break (0>=) [3,4,1,0,-2,3,4,10,-2]    > break (0<) [-1,-2]
   ([3,4,1],[0,-2,3,4,10,-2])              ([-1,-2],[])

   > break ('a'==) ['b','c','a','d','e']
   ("bc","ade")

    На следующем шаге мы рассмотрим функционалы-конструкторы.




Предыдущий шаг Содержание Следующий шаг