Изучай Haskell во имя добра! (Липовача) - страница 13

>ghci> head [5,4,3,2,1]

>5

Функция >tail принимает список и возвращает его «хвост». Иными словами, эта функция отрезает «голову» списка и возвращает остаток.

>ghci> tail [5,4,3,2,1]

>[4,3,2,1]

Функция >last принимает список и возвращает его последний элемент.

>ghci> last [5,4,3,2,1]

>1

Функция >init принимает список и возвращает всё, кроме его последнего элемента.

>ghci> init [5,4,3,2,1]

>[5,4,3,2]

Если представить список в виде сороконожки, то с функциями получится примерно такая картина:



Но что будет, если мы попытаемся получить головной элемент пустого списка?

>ghci> head []

>*** Exception: Prelude.head: empty list

Ну и ну! Всё сломалось!.. Если нет сороконожки, нет и «головы». При использовании функций >head, >tail, >last и >init будьте осторожны – не применяйте их в отношении пустых списков. Эту ошибку нельзя отловить на этапе компиляции, так что всегда полезно предотвратить случайные попытки попросить язык Haskell выдать несколько элементов из пустого списка.

Функция >length, очевидно, принимает список и возвращает его длину:

>ghci> length [5,4,3,2,1]

>5

Функция >null проверяет, не пуст ли список. Если пуст, функция возвращает >True, в противном случае – >False. Используйте эту функцию вместо >xs == [] (если у вас есть список с именем >xs).

>ghci> null [1,2,3]

>False

>ghci> null []

>True

Функция >reverse обращает список (расставляет его элементы в обратном порядке).

>ghci> reverse [5,4,3,2,1]

>[1,2,3,4,5]

Функция >take принимает число и список. Она извлекает соответствующее числовому параметру количество элементов из начала списка:

>ghci> take 3 [5,4,3,2,1]

>[5,4,3]

>ghci> take 1 [3,9,3]

>[3]

>ghci> take 5 [1,2]

>[1,2]

>ghci> take 0 [6,6,6]

>[]

Обратите внимание, что если попытаться получить больше элементов, чем есть в списке, функция возвращает весь список. Если мы пытаемся получить 0 элементов, функция возвращает пустой список.

Функция >drop работает сходным образом, но отрезает указанное количество элементов с начала списка:

>ghci> drop 3 [8,4,2,1,5,6]

>[1,5,6]

>ghci> drop 0 [1,2,3,4]

>[1,2,3,4]

>ghci> drop 100 [1,2,3,4]

>[]

Функция >maximum принимает список, состоящий из элементов, которые можно упорядочить, и возвращает наибольший элемент.

Функция >minimum возвращает наименьший элемент.

>ghci> minimum [8,4,2,1,5,6]

>1

>ghci> maximum [1,9,2,3,4]

>9

Функция >sum принимает список чисел и возвращает их сумму.

Функция >product принимает список чисел и возвращает их произведение.

>ghci> sum [5,2,1,6,3,2,5,7]

>31

>ghci> product [6,2,1,2]

>24

>ghci> product [1,2,5,6,7,9,2,0]

>0

Функция >elem принимает элемент и список элементов и проверяет, входит ли элемент в список. Обычно эта функция вызывается как инфиксная, поскольку так её проще читать: