- •Методические указания
- •Введение
- •Лабораторная работа № 4
- •1. Определение операторов
- •2. Рекурсивные типы
- •3. Списки как рекурсивные типы
- •4. Синтаксические деревья
- •Лабораторная работа № 5
- •1. Функции высшего порядка
- •1.1. Функция map
- •1.2. Функция filter
- •1.3. Функции foldr и foldl
- •1.4. Другие функции высшего порядка
- •2. Лямбда-абстракции
- •Лабораторная работа № 6
- •1. Модули программы
- •2. Абстрактные типы данных
- •3. Синонимы типов
- •4. Операции ввода-вывода
- •4.1. Базовые операции ввода-вывода
- •4.2. Стандартные операции ввода-вывода
- •4.3. Пример
- •5. Создание исполняемых программ
- •Заключение
- •Содержание методические указания
- •394026 Воронеж, Московский просп., 14
ФГБОУ ВПО
«Воронежский государственный технический университет»
Кафедра систем автоматизированного проектирования
и информационных систем
Методические указания
к выполнению лабораторных работ № 4-6
по дисциплине «Логическое и функциональное программирование» для студентов направления 230400.62 «Информационные системы и технологии» (профиль
«Информационные системы и технологии»)
очной формы обучения
Воронеж 2015
Составители: канд. техн. наук Д.Э. Короткевич,
ст. преподаватель С.И. Короткевич
УДК 681.5, 621.37
Методические указания к выполнению лабораторных работ № 4-6 по дисциплине «Логическое и функциональное программирование» для студентов направления 230400.62 «Информационные системы и технологии» (профиль «Информационные системы и технологии») очной формы обучения / ФГБОУ ВПО «Воронежский государственный технический университет»; сост. Д.Э. Короткевич, С.И. Короткевич. Воронеж, 2015. 29 с.
В методических указаниях приведено описание лабораторных работ по дисциплине «Логическое и функциональное программирование» для студентов на третьем курсе. Содержащаяся информация является базовой для изучения навыков функционального программирования на языке Haskell.
Методические указания подготовлены в электронном виде в текстовом редакторе MS Word 2010 и содержатся в файле Метод.указ.Haskell 4-6.doc.
Ил. 1.
Рецензент канд. техн. наук, доц. А.В. Питолин
Ответственный за выпуск зав. кафедрой д-р техн. наук, проф. Я.Е. Львович
Издается по решению редакционно-издательского совета Воронежского государственного технического университета
© ФГБОУ ВПО «Воронежский государственный технический университет», 2015
Введение
Язык Haskell на сегодняшний день является широко используемым языком программирования, т. к. имеет простое и логичное ядро языка, обладает неоспоримыми достоинствами Так, например, Haskell полностью берет управление памятью на себя, поэтому в программах написанных на этом языке гарантируется отсутствие таких сложных в обнаружении ошибок, как переполнение буфера, пустой указатель, неинициализированные данные и утечки памяти. Haskell активно применяется в области финансового программирования, анализа рисков, в системах поддержки решений, также на нем написано много коммерческих приложений с открытым исходным кодом.
В лабораторных работах 4-6 рассмотрены функции работы с рекурсивными типами, бинарными деревьями поиска и с использованием модулей. В ходе выполнения заданий студенты получат представление о функциях высшего порядка и научатся работать с ними, а также получат навыки программирования на языке Haskell с использованием модулей, различных типов данных и операций ввода-вывода.
Лабораторная работа № 4
Цель работы
Приобрести навыки программирования на языке Haskell. Получить представление об определении операторов, рекурсивных типах и синтаксических деревьях
Основные положения
1. Определение операторов
Бинарные операторы, такие как +, - и т. п. в языке Haskell являются такими же функциями, как и все остальные, за тем исключением, что для их вызова можно использовать инфиксную нотацию. Если взять бинарный оператор в скобки, то для его вызова можно использовать префиксную нотацию и обращаться с ним, как с обычной функцией.
Так, следующие пары записей эквивалентны:
2 + 2
(+) 2 2
x < y
(<) x y
x /= y
(/=) x y
Наоборот, любую функцию, принимающую два аргумента, можно использовать в инфиксном стиле. Для этого ее имя нужно окружить обратными кавычками (символ ‘). Например, если определить функцию:
func x y = (x + y) / (x - y)
то ее можно вызывать в следующих видах:
func 5 2
5 ‘func‘ 2
Если в имени функции встречаются только специальные символы, то она автоматически считается инфиксным оператором. При определении ее имя нужно заключать в скобки. Например, определим оператор «приближенно равно», проверяющий, что числа отличаются не более, чем на 0.001:
(~=) x y = abs (x - y) < 0.001
Теперь этот оператор можно использовать так же, как и все остальные:
testApproxEqual x y = if x ~= y then "equal"
else "not equal"