Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MakeevGA-Haskell-a4-shortcode_2014_05_31.doc
Скачиваний:
15
Добавлен:
19.01.2023
Размер:
1.79 Mб
Скачать

Оглавление

Оглавление 3

От автора 6

Структура 7

Пояснения и обозначения 8

Демонстрация кунг-фу 8

Теория 11

Основные понятия и типы данных 11

Списки 13

Кортежи 14

Функции, операторы 14

Полиморфные типы данных 16

Чтение сигнатур типов 18

Простейшие функции и операторы 19

Арифметические функции 19

Логические функции 20

Списочные функции 20

Кортежные функции 22

Создание своих функций 23

Способ 1. Определение функции как выражения от параметров: 23

Способ 2. Несколько определений одной функции: 23

Способ 3. Определение функции через синоним: 24

Способ 4. Лямбда функция (анонимная функция): 24

Способ 5. Частичное применение функции: 25

Образцы и сопоставление с образцом 27

Синтаксический хлеб и синтаксический сахар 30

Условия и ограничения 31

Локальные определения 32

Двумерный синтаксис 33

Арифметические последовательности 33

Замыкания списков 34

Функциональное мышление 34

Рекурсия как основное средство 35

Ручная редукция выражений 37

Думаем функционально, шаг раз 38

Думаем функционально, шаг два: аккумуляторы 41

Реализация простейших списочных и прочих функций 44

Думаем функционально, шаг три: хвостовая рекурсия 48

Еще раз о рекурсии 52

Полезные хитрости языка 55

Ленивые вычисления и строгие функции 55

Бесконечные списки 56

Функция show 57

Совсем немного о классах 58

Функция read 59

Функция error 60

Побочные эффекты и функция trace 61

Функции высших порядков 62

Мотивация 63

Функция map 65

Функция filter 71

Композиция функций 73

Функция foldr 76

Функция foldl 78

Свертки: разбор полетов 81

Выявление общей функциональности 83

Стандартные функции высших порядков 84

Еще немного про строгие функции 87

Создание своих типов данных 89

Простые перечислимые типы данных 89

Контейнеры 90

О сравнении, отображении и прочих стандартных операциях 92

Параметрические типы данных 93

Сложные типы данных 94

Тип данных Maybe 95

Рекурсивные типы данных: списки 97

Рекурсивные типы данных: деревья 98

Ввод-вывод 100

Простейший ввод-вывод 101

Объяснение кухни 102

Пример программы, производящей нетривиальное преобразование текстового файла 110

Пример решения задачи: Поиск в пространстве состояний 113

Через массивы и последовательность промежуточных состояний 114

Решение для тех, кто не хочет разбираться сам 122

Через списки, лог истории и уникальную очередь 123

Решение для тех, кто не хочет разбираться сам 127

Задачник 129

Пояснения и обозначения 129

Лабораторная работа 1 129

Простейшие функции 129

Простейшие логические функции 130

Простейшие списочные функции 130

Лабораторная работа 2 132

Символьные функции 132

Простейшие кортежные функции 132

Теоретико-множественные операции 132

Сортировка 133

Вспомогательные функции 133

Отладка 134

Лабораторная работа 3 134

Списочные функции высших порядков 134

Арифметические последовательности 136

Генераторы списков 137

Лабораторная работа 4 137

Бесконечные списки 137

Ввод-вывод 138

Нетривиальные функции 139

Лабораторная работа 5 141

Простые числа и факторизация 141

Деревья 141

Деревья вычислений 143

Дополнительные задания для самостоятельной работы 145

Задания с Project Euler 145

Простейший инструментарий 148

Установка WinHugs и начало работы 148

Работа с интерпретатором WinHugs в интерактивном режиме 148

Команды интерпретатору 150

Работа с модулями 150

Список рекомендуемой литературы и электронных ресурсов 153