Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 4.doc
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
160.77 Кб
Скачать

ФГБОУ ВПО

«Воронежский государственный технический университет»

Кафедра систем автоматизированного проектирования

и информационных систем

Методические указания

к выполнению лабораторных работ № 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"