- •Оглавление
- •От автора
- •Структура
- •Пояснения и обозначения
- •Демонстрация кунг-фу
- •Теория Основные понятия и типы данных
- •Кортежи
- •Функции, операторы
- •Полиморфные типы данных
- •Чтение сигнатур типов
- •Простейшие функции и операторы
- •Арифметические функции
- •Логические функции
- •Списочные функции
- •Кортежные функции
- •Создание своих функций
- •Способ 1. Определение функции как выражения от параметров:
- •Способ 2. Несколько определений одной функции:
- •Способ 3. Определение функции через синоним:
- •Способ 4. Лямбда функция (анонимная функция):
- •Способ 5. Частичное применение функции:
- •Образцы и сопоставление с образцом
- •Синтаксический хлеб и синтаксический сахар
- •Условия и ограничения
- •Локальные определения
- •Двумерный синтаксис
- •Арифметические последовательности
- •Замыкания списков
- •Функциональное мышление
- •Рекурсия как основное средство
- •Ручная редукция выражений
- •Думаем функционально, шаг раз
- •Думаем функционально, шаг два: аккумуляторы
- •Реализация простейших списочных и прочих функций
- •Думаем функционально, шаг три: хвостовая рекурсия
- •Еще раз о рекурсии
- •Полезные хитрости языка
- •Ленивые вычисления и строгие функции
- •Бесконечные списки
- •Функция show
- •Совсем немного о классах
- •Функция read
- •Функция error
- •Побочные эффекты и функция trace
- •Функции высших порядков
- •Мотивация
- •Функция map
- •Функция filter
- •Композиция функций
- •Функция foldr
- •Функция foldl
- •Свертки: разбор полетов
- •Выявление общей функциональности
- •Стандартные функции высших порядков
- •Еще немного про строгие функции
- •Создание своих типов данных
- •Простые перечислимые типы данных
- •Контейнеры
- •О сравнении, отображении и прочих стандартных операциях
- •Параметрические типы данных
- •Сложные типы данных
- •Тип данных Maybe
- •Рекурсивные типы данных: списки
- •Рекурсивные типы данных: деревья
- •Ввод-вывод
- •Простейший ввод-вывод
- •Объяснение кухни
- •Пример программы, производящей нетривиальное преобразование текстового файла
- •Пример решения задачи: Поиск в пространстве состояний
- •Через массивы и последовательность промежуточных состояний
- •Решение для тех, кто не хочет разбираться сам
- •Через списки, лог истории и уникальную очередь
- •Решение для тех, кто не хочет разбираться сам
- •Задачник
- •Пояснения и обозначения
- •Лабораторная работа 1 Простейшие функции
- •Простейшие логические функции
- •Простейшие списочные функции
- •Лабораторная работа 2 Символьные функции
- •Простейшие кортежные функции
- •Теоретико-множественные операции
- •Сортировка
- •Арифметические последовательности
- •Генераторы списков
- •Лабораторная работа 4 Бесконечные списки
- •Ввод-вывод
- •Нетривиальные функции
- •Лабораторная работа 5 Простые числа и факторизация
- •Деревья
- •Деревья вычислений
- •Дополнительные задания для самостоятельной работы Задания с Project Euler
- •Простейший инструментарий Установка WinHugs и начало работы
- •Работа с интерпретатором WinHugs в интерактивном режиме
- •Команды интерпретатору
- •Работа с модулями
- •Список рекомендуемой литературы и электронных ресурсов
Оглавление
Оглавление 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