Списки
В отличие от кортежей, список может хранить произвольное количество элементов. Чтобы задать список в Haskell, необходимо в квадратных скобках перечислить его элементы через запятую. Все эти элементы должны принадлежать одному и тому же типу. Тип списка с элементами, принадлежащими типу a, обозначается как [a].Prelude>[1,2]
[1,2] :: [Integer]
Prelude>[’1’,’2’,’3’]
[’1’,’2’,’3’] :: [Char]
В списке может не быть ни одного элемента. Пустой список обозначается как []. Оператор : (двоеточие) используется для добавления элемента в начало списка. Его левым аргументом должен быть элемент, а правым — список:
Prelude>1:[2,3]
[1,2,3] :: [Integer]
Prelude>’5’:[’1’,’2’,’3’,’4’,’5’]
[’5’,’1’,’2’,’3’,’4’,’5’] :: [Char]
Prelude>False:[]
[False] :: [Bool]
С помощью оператора (:) и пустого списка можно построить любой список:
Prelude>1:(2:(3:[]))
[1,2,3] :: Integer
Оператор (:) ассоциативен вправо, поэтому в приведенном выше выражении можно опустить скобки:
Prelude>1:2:3:[]
[1,2,3] :: Integer
Элементами списка могут быть любые значения — числа, символы, кортежи, другие списки и т.д.
Prelude>[(1,’a’),(2,’b’)]
[(1,’a’),(2,’b’)] :: [(Integer,Char)]
Prelude>[[1,2],[3,4,5]]
[[1,2],[3,4,5]] :: [[Integer]]
Для работы со списками в языке Haskell существует большое количество функций. В данной лабораторной работе рассмотрим только некоторые из
них.
• Функция head возвращает первый элемент списка.
• Функция tail возвращает список без первого элемента.
• Функция length возвращает длину списка.
Функции head и tail определены для непустых списков. При попытке применить их к пустому списку интерпретатор сообщает об ошибке. При-
меры работы с указанными функциями:
Prelude>head [1,2,3]
1 :: Integer
Prelude>tail [1,2,3]
[2,3] :: [Integer]
Prelude>tail [1]
[] :: Integer
Prelude>length [1,2,3]
3 :: Int
Заметьте, что результат функции length принадлежит типу Int, а не типу Integer. Для соединения (конкатенации) списков в Haskell определен оператор ++.
Prelude>[1,2]++[3,4]
[1,2,3,4] :: Integer