Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Алгебраические типы данных


Проверка типов.

Важнейшей чертой Хаскеля является использование строгой формальной системы типов. Компилятор проверяет, чтобы каждое подвыражение в программе имело строго-определенный тип.

Тип определяется на специальном языке типов. Рассмотрим варианты типовых выражений:

1. Тип может задаваться типовой переменной. эти переменные, как и переменные выражений начинаются с маленькой буквы, обозначаются a, b, c,…

2. Тип может задаваться конструктором типа. Позволяет создавать новые типы на основе уже заданных типов.

→ - оператор ассоциативен вправо

Append :: [a]->([a]->[a])

Когда компилятор разбирает синтаксические ошибки программы, он одновременно сопоставляет типы переменных. Каждое выражение в программе является одновременно требованием к типу, например, для литералов нужно задать их тип.

Тип условного выражения.

Для него должно выполнятся следующее равенство: { if e1 then e2 else e3} = {e2} = {e3};

{e1} = Bool

Лекция 6.

1) Если в уравнении приравнены два разных примитивных типа, то появляется ошибка типов.

2) Если примитивный тип приравнен к структурированному типу, то тоже ошибка.

3) Если приравнены два структурированных типа с различными конструкторами.

4) Если есть равенство a=a, равенство можно отбросить, оно не несет никакого смысла.

5) Если получилось равенство двух одинаковых примитивных типа, то такое равенство можно отбросить.

6) Если в равенстве в обеих частях стоят выражения, построенные одинаковым конструктором, тогда первое равенство заменяется группой равенств, в которых приравнены соответствующие компоненты структуры.

7) Если одна часть не переменная, а вторая тип в общем виде, то меняем их местами относительно знака равно.

8) Если есть равенство a=t, где а встречается в t, то возникает ошибка типов.

9) Если есть равенство а=t, а переменная а встречается в другом равенстве правой части, значит, в том равенстве нужно написать вместо а t.

Пример:

Append x sys = if null xs then ys else head xs : append (tail xs) ys

Для функции можно составить следующее уравнение:

{append} = {xs}→{ys}→{if } все тело является конструкцией if.

Условие должно быть булевым:

{null xs} = Bool

Вся конструкция if имеет такой же тип, как и то, что стоит после xs и то, что стоит после else:

{if…} = {ys} = {head…}

{head…} = [{head xs}] = {append…}

{append} = {tail xs}→{ys}→{append…}

[{head xs}] = {xs}

{tail xs} = {xs} = [a]

{xs} = [b]

{xs}→{ys}→{if…} = {tail xs}→{ys}→{append…}

{xs} = {tail xs}

{ys} = {ys}

{if…} = {append…}

Для построения сложных структур данных используется алгебраические типы данных. В Хаскеле есть ключевое слово DATA, в нем определяется <конструктор типа> = <конструкторы данных 1> | <конструктор данных 1> | … < конструктор данных n>. Конструктор типа имеет имя, которое начинается с большой буквы, и несколько параметров, которые обозначаются типами переменными.



Конструктор данных имеет имя, начинающееся с большой буквы, и возможно параметры, типовые выражения.

С данными алгебраического типа удобнее всего оперировать сопоставлением с образцом.

Алгебраический тип данных можно задать так, что для каждого компонента конструктора данных будет создана своя функция селекта.

<== предыдущая лекция | следующая лекция ==>
Обработка результатов эксперимента на основе регрессии | 

Дата добавления: 2014-01-11; Просмотров: 333; Нарушение авторских прав?


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



ПОИСК ПО САЙТУ:


Рекомендуемые страницы:

Читайте также:
studopedia.su - Студопедия (2013 - 2020) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление
Генерация страницы за: 0.003 сек.