На этом шаге мы рассмотрим использование этой операции.
В языке Haskell существует синтаксический сахар, позволяющий кратко записывать списки с помощью двух точек "..".
Другими словами, синтаксический сахар - это маленькие особенности, нарушающие основные правила языка, чтобы сделать его более дружественным по отношению к программисту.
По словам А.Перлиса, "синтаксический сахар вызывает рак точки с запятой".
Комбинация символов .. является зарезервированной последовательностью символов языка Haskell и используется так: при задании конечного списка указывается первый и последний элемент одного и того же типа данных:
[a..z]
При задании конечного списка, моделирующего конечную арифметическую прогрессию (подобные списки иногда называются арифметическими последовательностями), разность прогрессии определяется при помощи указания первого и второго элементов последовательности:
[a,b..z].
При отсутствии указания второго элемента последовательности разность задаваемой арифметической последовательности равна 1.
1. [1..100] - список натуральных чисел от 1 до 100. 2. [2,4..100] - список чётных натуральных чисел от 1 до 100. 3. [2.6..6.0] - список чисел [2.6,3.6,4.6,5.6].
Отметим, что указание числовых интервалов позволяет задавать только список чисел, поэтому в языке Haskell существует возможность создавать списки, моделирующие конечные математические последовательности.
Приведем пример списков различных типов.
-- Демонстрация постоянных функций, значениями -- которых являются списки различных типов ------------------------------------------ -- (1) Список целых чисел ------------------------- list1:: [Int] list1 = [1,2,3,4,1,4] ------------------------------ -- (2) Список булевых значений ------------------------------ list2:: [Bool] list2 = [True,False,True] ------------------------- -- (3) Список символов ---------------------- list3:: [Char] list3 = ['s','t','r','i','n','g'] --------------------------------- -- (4) Строка как список символов --------------------------------- list4:: [Char] list4 = "string" --------------------------------------------------------- -- (5) Список целых чисел в диапазоне от 2 до 7 с шагом 1 --------------------------------------------------------- list5:: [Int] list5 = [2..7] -- [2,3,4,5,6,7] --------------------------------------------------------- -- (6) Список целых чисел в диапазоне от 7 до 3 с шагом 1 --------------------------------------------------------- list6:: [Int] list6 = [7,6..3] -- [7,6,5,4,3] ---------------------------------------------------------- -- (7) Список вещественных чисел в диапазоне от 3.1 до 7.0 -- с шагом 1 ---------------- list7:: [Float] list7 = [3.1..7.0] -- [3.1,4.1,5.1,6.1,7.1] ---------------------------------------------------------- -- (8) Список вещественных чисел в диапазоне от 0.0 до 1.0 -- с шагом 0.3 ------------------ list8:: [Float] list8 = [0.0,0.3..1.0] -- [0.0,0.3,0.6,0.9] --------------------------------------------- -- (9) Список числовых списков ------------------------------ list9:: [[Int]] list9 = [[12,2],[2,12],[],[-1,-7,-3],[10]]
enumFromTo:: Int -> Int -> [Int] enumFromTo x y | y<x = [] | True = x : enumFromTo (x+1) y
На следующем шаге мы рассмотрим операции над списками.