![]() КАТЕГОРИИ: Архитектура-(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; Просмотров: 561; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |