Программирование на Haskell

Курс ставит своей целью познакомить студентов с функциональным языком программирования Haskell как с первым языком программирования.
Студентов 375
690 ₽
Темы:
Программирование
Объем

108 час.
Длительность

108 дней
Нагрузка в неделю

2 час.
Описание Курс открывает двери в мир функционального программирования. Слушатели познакомятся с принципиально иным подходом к написанию кода по сравнению с императивными языками. Изучаются базовые типы, сопоставление с образцом, списки, функции высшего порядка, свертки и абстракции. На практических примерах демонстрируется лаконичность языка Haskell при решении математических и алгоритмических задач.
Цели
  • Сформировать функциональный стиль мышления.
  • Обучить основам чистого функционального программирования.
  • Развить навыки решения задач с использованием языка Haskell.
Чему я научусь?
  • Писать код в функциональной парадигме без побочных эффектов.
  • Использовать ленивые вычисления и бесконечные списки.
  • Применять функции высшего порядка и сопоставление с образцом.
  • Реализовывать рекурсивные алгоритмы обработки данных.
Чему я научусь?
  • Писать код в функциональной парадигме без побочных эффектов.
  • Использовать ленивые вычисления и бесконечные списки.
  • Применять функции высшего порядка и сопоставление с образцом.
  • Реализовывать рекурсивные алгоритмы обработки данных.

Учебный план

Занятия
Экзамен экстерном Внимание! Экзамен экстерном не обязательный для сдачи. При желании вы можете его пройти, если хотите подтвердить свои знания по данному курсу без его изучения или поверить свои знания по нему. Экзамен экстерном можно сдать только один раз. 90 мин
1 Обзор курса "Обзор курса, учебников, контрольных мероприятий. Книга Дональда Кнута ""Искусство программирования"". Программирование как наука, ремесло и как... "Обзор курса, учебников, контрольных мероприятий. Книга Дональда Кнута ""Искусство программирования"". Программирование как наука, ремесло и как искусство" ещё 93 мин
2 История функционального программирования О решении задач, консультациях, проверке задач через сервер. Эффективность и управляемость кода. Введение. История функционального программирования. 72 мин
3 Первые языки программирования Компьютеры БСМ-4, БСМ-12. Компиляторы. Фортран (транслятор формул). 78 мин
4 Императивные языки программирования Фон-неймановская архитектура. Суть функционального программирования. 60 мин
5 Суть функционального программирования Функциональная парадигма в программировании. Первые примеры. Вычисление как преобразование выражения. Иная последовательность редукций. 78 мин
6 Свойство Черча-Россера Все варианты редукции three Infinity. 51 мин
7 Примеры. Haskell — ленивый язык Величины (значения). Типы величин (значения). Неопределенные величины. 81 мин
8 Функции. Декартово произведение 54 мин
9 Функции (подход современной алгебры) Отношение. Экзистенциональное равенство функций. Композиция функций. Ассоциативность композиции. 69 мин
10 Строгие функции Виды вычислений (энергичные и ленивые). Преимущества Haskell. 66 мин
11 100%-чистое функциональное программирование ФП высокого порядка. 63 мин
12 Строгая типизация. Достоинства 75 мин
13 Знакомство с системой HUGS. Скрипты и сессии Пример кода в Haskell (сортировка списков). Полиморфная функция сортировки. Прелюдия (обзор Prelude.hs). 135 мин
14 Комментарии Комментарии .hs., .lhs. Комментарии в TEX .lhs. 60 мин
15 Базовые типы языка Haskell Целые числа. Числа с плавающей точкой. Сравнения чисел. Логические величины. Символы. 69 мин
16 Символы. Списки. Строки 126 мин
17 Строки. Упорядоченные множества 96 мин
18 Задание функций Объявление и определение. Комбинация функций. 42 мин
19 Комбинации функций. Частные определения 63 мин
20 Определения с альтернативами. Сопоставление с образцом 69 мин
21 Сопоставление с образцом Рекурсия. Полиморфизм. Функция error.
22 Функция map. Операция композиции. Классы 69 мин
23 Классы. Операторы. Нотации 69 мин
24 Приоритет операторов. Ассоциативность 63 мин
25 Ассоциативность. Определение операторов. Прелюдия (пример) 63 мин
26 Карринг (Currying) Частичная параметризация. Функция curry. 69 мин
27 Скобки. Операторные секции Функции высшего порядка. (Слайды, часть вторая). Функции на списках: map, filter. Разбор примеров (шаблоны программирования). 123 мин
28 Левая и правая свертки: foldr и foldl Правая свертка: foldl. Композиция функций. (.): многоликий карринг. Разбор примеров (шаблоны программирования). 132 мин
29 Итерация: until Mетод простой итерации, sqrt. 84 мин
30 Вариация. Лямбда-выражения Числовые функции. Целочисленные задачи. 54 мин
31 Частное и остаток "Список простых чисел [2 .. n] (без дум об эффективности). Список простых чисел [2 .. n]... "Список простых чисел [2 .. n] (без дум об эффективности). Список простых чисел [2 .. n] (Решето Эратосфена). """ ещё 132 мин
32 Список простых чисел [2 .. n] (Решето Эратосфена) 99 мин
33 Какой день недели? 36 мин
34 Сколько дней прошло с 31 декабря 0 года до? 78 мин
35 Вечный календарь "Разработка программы ""сверху-вниз"" на примере."
36 Числовые функции. Численные вычисления 57 мин
37 Численное дифференцирование. Параметризация. Нули функции, метод Ньютона. 51 мин
38 Нули функции, метод Ньютона 54 мин
39 Обратная функция. Ограниченная применимость 69 мин
40 Структуры данных. Списки 51 мин
41 Полиморфизм конструкторов списка. Указание числовых интервалов 84 мин
42 Сравнение списков 66 мин
43 Лексикографический порядок Append: объединение списков. 30 мин
44 Append: объединение списков (повторение) 24 мин
45 Concat: объединение списков. Разбиение списка на части 69 мин
46 Разбиение списка на части — продолжение 153 мин
47 Обращение списка. 87 мин
48 Длина списка. Проверка вхождения элемента в список 30 мин
49 Проверка вхождения элемента в список 60 мин
50 Сортировка вставкой: Ord a => [a] 75 мин
51 Сортировка слиянием 135 мин
52 Функции высшего порядка на списках. Свертки без начального значения 39 мин
53 Функция zip (zipWith) Этюд на zipWith: проверка отсортированности списка. Сканирование слева. Примеры scanl. 99 мин
54 Примеры scanl. Префиксы списка Наивно: scanl через inits. Сканирование слева. Эффективное scanl. 90 мин
55 Сканирование справа. Сканирование без пустых списков 39 мин
56 Структуры данных. Списки. Абстракции списков 66 мин
57 Диапазон изменения Q (итератор, генератор) Предикатное (охранное) выражение P. Локальное определение L. 48 мин
58 Пример. Пифагоровы треугольники 138 мин
59 Абстракция списков vs. map, filter, conc. Пример 24 мин
60 Задача Треугольники-1 и 2 105 мин
61 Задача Треугольники-3 96 мин
62 Задача Десять цифр 36 мин
63 Задача Десять цифр (решение) 135 мин
64 Задача Шахматы 147 мин
65 Задача Шахматы (продолжение) 126 мин
66 Функции на бесконечных списках Получение списка простых чисел (этюд на iterate). Получение списка простых чисел (этюд на iterate). Генератор псевдослучайных... Получение списка простых чисел (этюд на iterate). Получение списка простых чисел (этюд на iterate). Генератор псевдослучайных чисел. ещё 87 мин
67 Генератор псевдослучайных чисел (продолжение) 96 мин
68 Кортежи Использование кортежей. Tuples: кортежи (таплы). Tuples: зачем нужны? 39 мин
69 Кортежи (продолжение) Типичное использование: таблицы. 54 мин
70 Синонимы. Мотивация Задача: Сколько треугольников с узлами в заданных точках? 48 мин
71 Tuples: зачем нужны? Типичное использование: таблицы Задача: Сколько треугольников с узлами в заданных точках? (Повторение). Обсуждение задачи. Решение. 129 мин
72 Синонимы. Синонимы из прелюдии Параметризованный синоним. Пример: рациональные. 84 мин
73 Haskell как язык ООП Использование Haskell для прототипирования 51 мин
74 Инкапсуляция, наследование Объект, класс. Абстракция и наследование. Полиморфизм, абстракция. Классы и перегрузка. Полиморфизмы. Полиморфизмы и классы. Class и... Объект, класс. Абстракция и наследование. Полиморфизм, абстракция. Классы и перегрузка. Полиморфизмы. Полиморфизмы и классы. Class и Instance. ещё 90 мин
75 Встроенные классы. Класс Eq. Класс Ord Пример: неупорядоченная пара. Плохое определение. Исправленное определение. Класс Show. 51 мин
76 Класс Show. Класс Read Класс Enum. Класс Num. Множественное наследование. Классы чисел. Алгебраические типы данных Типы-синонимы. Определение новых типов данных.... Класс Enum. Класс Num. Множественное наследование. Классы чисел. Алгебраические типы данных Типы-синонимы. Определение новых типов данных. Ограниченность типов-синонимов. ещё 54 мин
77 Размеченное объединение. Перечисляемые типы данных "Перечисляемые типы. Функции над Bool. Перечисляемые типы vs. Подразумеваемые отрезки. Пример deriving. Пример использования. Пример использования.... "Перечисляемые типы. Функции над Bool. Перечисляемые типы vs. Подразумеваемые отрезки. Пример deriving. Пример использования. Пример использования. """ ещё 81 мин
78 Полиморфные типы данных. Конструкторы 84 мин
79 Повтор: неупорядоченная пара целых, чего угодно 51 мин
80 Пример: Eq (Either a b) и Ord (Either a b) 48 мин
81 Размеченное объединение Рекурсивные типы данных. Деревья. 87 мин
82 Подсчет вершин (Node, Leaf) Разновидности пометок деревьев. Разновидности деревьев. Дерево с разными вершинами. 57 мин
83 Размеченное объединение. Деревья поиска Поиск в Eq a. Поиск в Ord a. Деревья поиска. Поиск в дереве. Сбалансированность дерева. 72 мин
84 Построение дерева поиска. Пример работы 90 мин
85 Сортировка с помощью дерева поиска Построение списка меток. Сортировка с помощью дерева поиска. Удаление вершины из дерева поиска. 51 мин
86 Удаление вершины из дерева поиска 63 мин
87 Удаление вершины из дерева поиска (продолжение) 117 мин
88 Размеченное объединение. Метки полей Доступ к полям: по шаблону (позиционный) или по именам? Метки полей: одним выстрелом двух зайцев. Метки... Доступ к полям: по шаблону (позиционный) или по именам? Метки полей: одним выстрелом двух зайцев. Метки полей: использование. Метки полей: построение новых величин. Метки полей: общий случай. ещё 48 мин
89 Метки полей: пример. Метки полей: задание величин 108 мин
90 Новый тип. Пример: натуральные числа. Natural как экземпляр Num 42 мин
91 Примеры структурированных типов данных. Тип Angle 87 мин
92 Операции с векторами и матрицами 264 мин
93 Операции с векторами и матрицами (продолжение) 165 мин
94 Инкапсуляция данных в модулях Инкапсуляция — сокрытие деталей (encapsulate). Модули: экспорт и импорт. 45 мин
95 Имена модулей и файлов. Обзор имен в Haskell Обзор имен в Haskell: синтаксические правила. Пример модуля (экспортера). Пример модуля (импортера). Декларации. Экспорт и импорт. 57 мин
96 Контроль пространства имен "Пример на ""qualified"". Синонимы имен модулей. Модуль как способ реализации АТД. Реализация Tree как АТД. Использование... "Пример на ""qualified"". Синонимы имен модулей. Модуль как способ реализации АТД. Реализация Tree как АТД. Использование Tree как АТД. Стек (LIFO) как АТД. Реализация стека на списке." ещё 87 мин
97 Реализация стека на списке Реализация стека на списке пар (значение, количество). 96 мин
98 Сильные и слабые стороны подхода АТД 39 мин
Тренировочный экзамен Внимание! Тренировочный экзамен экстерном не обязательный для сдачи. При желании вы можете его пройти, если хотите проверить свои знания курса перед сдачей экзамена. Тренировочный экзамен можно сдавать сколько угодно один раз. 90 мин
Экзамен 60 мин

Какой документ я получу?

Стоимость программы

690 ₽