Обращение к элементам списка
Если вы хотите извлечь элемент из списка по индексу, используйте оператор >!!
. Индексы начинаются с нуля.
>ghci> "Стив Бушеми" !! 5
>'Б'
>ghci> [9.4,33.2,96.2,11.2,23.25] !! 1
>33.2
Но если вы попытаетесь получить шестой элемент списка, состоящего из четырёх элементов, то получите сообщение об ошибке, так что будьте осторожны!
Списки могут содержать другие списки. Также они могут содержать списки, которые содержат списки, которые содержат списки…
>ghci> let b = [[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]
>ghci> b
>[[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]
>ghci> b ++ [[1,1,1,1]]
>[[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3],[1,1,1,1]]
>ghci> [6,6,6]:b
>[[6,6,6],[1,2,3,4],[5,3,3,3],[1,2,2,3,4],[1,2,3]]
>ghci> b !! 2
>[1,2,2,3,4]
Вложенные списки могут быть разной длины, но не могут быть разных типов. Подобно тому как нельзя создать список, содержащий несколько символов и несколько чисел, нельзя создать и список, содержащий несколько списков символов и несколько списков чисел.
Списки можно сравнивать, только если они содержат сравнимые элементы. При использовании операторов ><
, ><=
, >>=
и >>
сравнение происходит в лексикографическом порядке. Сначала сравниваются «головы» списков; если они равны, то сравниваются вторые элементы. Если равны и вторые элементы, то сравниваются третьи – и т. д., пока не будут найдены различающиеся элементы. Результат сравнения списков определяется по результату сравнения первой пары различающихся элементов.
Сравним для примера >[3,4,2]<[3,4,3]
. Haskell видит, что >3
и >3
равны, поэтому переходит к сравнению >4
и >4
, но так как они тоже равны, сравнивает >2
и >3
. Число >2
меньше >3
, поэтому первый список меньше второго. Аналогично выполняется сравнение на ><=
, >>=
и >>
:
>ghci> [3,2,1] > [2,1,0]
>True
>ghci> [3,2,1] > [2,10,100]
>True
>ghci> [3,4,2] < [3,4,3]
>True
>ghci> [3,4,2] > [2,4]
>True
>ghci> [3,4,2] == [3,4,2]
>True
Непустой список всегда считается больше, чем пустой. Это позволяет сравнивать друг с другом любые два списка, даже если один из них точно совпадает с началом другого.