Функциональное программирование 2MIT осень 2020
Лекции
Преподаватель: Москвин Денис Николаевич dmoskvin@gmail.com
Пожалуйста, указывайте в теме письма FPHSE.
Слайды
Модуль 1
Лекция 1. Лямбда-исчисление 04.09.2020 (пт) 9:30-10:50 online
Лекция 2. Рекурсия и редукция 11.09.2020 (пт) 9:30-10:50 online
Лекция 3. Просто типизированное лямбда-исчисление 18.09.2020 (пт) 9:30-10:50 online
Лекция 4. Введение в Haskell 25.09.2020 (пт) 9:30-10:50 online (исходный код со слайдов)
Лекция 5. Типы данных 02.10.2020 (пт) 8:50-10:50 online (исходный код со слайдов)
Лекция 6. Классы типов 09.10.2020 (пт) 9:30-10:50 online (исходный код со слайдов)
Лекция 7. Свертки 16.10.2020 (пт) 9:30-10:50 online (исходный код со слайдов)
Модуль 2
Лекция 8. Аппликативные функторы 06.11.2020 (пт) 9:30-10:50 online (исходный код со слайдов)
Лекция 9. Использование аппликативных функторов 13.11.2020 (пт) 9:30-10:50 online (исходный код со слайдов)
Лекция 10. Монады 20.11.2020 (пт) 9:30-10:50 online (исходный код со слайдов)
Лекция 11. Стандартные монады 26.11.2020 (чт) 9:30-10:50 online (исходный код со слайдов)
Лекция 12. Трансформеры монад 27.11.2020 (пт) 9:30-10:50 online (исходный код со слайдов, еще)
Лекция 13. Алгоритм вывода типов 03.12.2020 (чт) 9:30-10:50 online
Лекция 14. Рекурсивные типы 04.12.2020 (пт) 9:30-10:50 online (исходный код со слайдов)
Лекция 15. Молнии и линзы 11.12.2020 (пт) 9:30-10:50 online (исходный код со слайдов: зипперы, реализация линз ван Ларховена, работа со стандартными линзами)
Полезные ссылки
Learn You a Haskell for Great Good!
Полезными могут оказаться конспекты лекций по теоретической и практической частям курса. Это расширенные версии слайдов, с дополнительными примерами и рассуждениями. (Предупреждение: они неполные и представляют собой раннюю альфу!)
Практика Москвин
Преподаватель: Москвин Денис Николаевич dmoskvin@gmail.com
Пожалуйста, указывайте в теме письма FPHSE.
Текущая успеваемость
Проценты переводятся в баллы следующей функцией
score :: Int -> Int score proc | proc < 58 = 0 | proc > 98 = 10 | otherwise = (proc - 58) `div` 4
GHCi> map ((,) <*> score) [100,99..61] [(100,10),(99,10),(98,10),(97,9),(96,9),(95,9),(94,9),(93,8),(92,8),(91,8),(90,8),(89,7),(88,7),(87,7),(86,7),(85,6),(84,6),(83,6),(82,6),(81,5),(80,5),(79,5),(78,5),(77,4),(76,4),(75,4),(74,4),(73,3),(72,3),(71,3), (70,3),(69,2),(68,2),(67,2),(66,2),(65,1),(64,1),(63,1),(62,1),(61,0)]
Haskell: рекомендации по установке
Для установки Haskell под Linux и Mac удобнее всего использовать утилиту ghcup.
Для установки под Windows я в настоящий момент рекомендую скачать и запустить установщик Haskell Platform 8.6.5. Хотя эта версия годичной давности, для наших учебных целей она вполне подойдет.
Домашние задания на stepik.org
Для выполнения домашних заданий по Haskell следует:
Если вы ранее не обучались на Stepik, зарегистрироваться тут. Настоятельная просьба - указать идентификационные данные, позволяющие опознавать вас без сложных исследований.
Перейти по ссылке-приглашению на курс: ссылка только группы 1 (практические занятия ведет Москвин).
Модули с текущим домашним заданием будут становиться доступными по мере прохождения курса, дедлайны будут видны там же.
Отметим, что проверяющая система на Stepik использует GHC 8.0.2. Не пользуйтесь, пожалуйста, при сдаче домашних заданий более новыми расширениями языка и библиотек.
Материалы
Практика 1. Чистое лямбда-исчисление как язык программирования 07.09.2020 (пн) 14:40-16:00 online
ДЗ 1. Исходник в TeX (предпочтительный формат сдаваемого ДЗ - pdf)
Мягкий дедлайн 13.09.2020 22:00. При наличии ошибок можно 1 раз переделать до жесткого дедлайна.
Жесткий дедлайн 14.09.2020 14:40. Решения, присланные после этого срока, не проверяются.
Практика 2. Рекурсия и редукция 14.09.2020 (пн) 18:10-19:30 online
ДЗ 2. Исходник в TeX (предпочтительный формат сдаваемого ДЗ - pdf)
Мягкий дедлайн 20.09.2020 22:00. При наличии ошибок можно 1 раз переделать до жесткого дедлайна.
Жесткий дедлайн 21.09.2020 18:10. Решения, присланные после этого срока, не проверяются.
Практика 3. Просто типизированное лямбда-исчисление 21.09.2020 (пн) 18:10-19:30 online
ДЗ 3. Исходник в TeX (предпочтительный формат сдаваемого ДЗ - pdf)
Мягкий дедлайн 27.09.2020 22:00. При наличии ошибок можно 1 раз переделать до жесткого дедлайна.
Жесткий дедлайн 28.09.2020 18:10. Решения, присланные после этого срока, не проверяются.
Практика 4. Введение в Haskell 28.09.2020 (пн) 18:10-19:30 online
Практика 5. Стандартные списки 05.10.2020 (пн) 18:10-19:30 online
Практика 6. Классы типов 12.10.2020 (пн) 18:10-19:30 online
Практика 7. Полугруппы, моноиды, свертки 05.11.2020 (чт) 11:10-12:30 (ДОПОЛНИТЕЛЬНОЕ ЗАНЯТИЕ) online
Практика 8. Аппликативные функторы 06.11.2020 (пт) 15:00-16:20 online
Практика 9. Траверсы, парсеры, моноидальные функторы 13.11.2020 (пт) 15:00-16:20 online
Практика 10. Монады (исходник для практики) 20.11.2020 (пт) 15:00-16:20 online
Практика 11. Стандартные монады (исходник для практики) 27.11.2020 (пт) 15:00-16:20 online
Практика 12. Трансформеры монад (исходник для практики) 01.12.2020 (вт) 10:30-11:50 online
Практика 13. Алгоритм вывода типов 04.12.2020 (пт) 15:00-16:20 online
Практика 14. Рекурсивные типы (исходник для практики) 08.12.2020 (вт) 10:30-11:50 online
Практика 15. Молнии и линзы (исходник для практики: зипперы, исходник для практики: линзы) 11.12.2020 (пт) 15:00-16:20 online
Практика 16. Тестирование 13.12.2020 (вс) 11:00-12:30 online, Stepik!!!
Практика Кайсин
Кайсин Илья Сергеевич @dmrkk
, demarkok@gmail.com
Инструкция по сдаче
Для первых трёх заданий:
- Заполните (??) в файле с заданием
- Отправьте на
demarkok@gmail.com
с темой hw01/hw02/hw03 - Основная часть простая, поэтому если с чем-то трудности, обязательно пишите на
@dmrkk
- Звёздочки - это сложность
- Исправлять до мягкого дедлайна можно несколько раз
Практики и задания
- Практика 1, Домашнее задание 1 (Жесткий дедлайн 14.09.2020 14:40, Мягкий дедлайн 13.09.2020 14:40)
- Практика 2, Домашнее задание 2 (Жёсткий дедлайн 21.09.2020 14:40, Мягкий дедлайн 20.09.2020 14:40)
- Практика как у первой группы, Домашнее задание 2 (Жёсткий дедлайн 28.09.2020 14:40, Мягкий дедлайн 27.09.2020 23:00)
Практика Алфёров
Почта для домашек: vasily.v.alferov@gmail.com
Телега для телег: @vasiliyalferov
Правила игры
- Оценка определяется отношением числа набранных баллов к сумме баллов за обязательные задачи.
- В конце семестра я выберу число
a
между 0.5 и 0.65.- Студент с указанным отношением, меньшим
a
, получает оценку 0. - Доля баллов
a
соответствует оценке 0, доля баллов 1 соответствует оценке 10, между ними оценка мапится линейно. - Округление — вниз.
- 0.58 — хорошее начальное приближение числа
a
.
- Студент с указанным отношением, меньшим
- Оценка за практику не является блокирующей.
Материалы
- Практика 07.09 (лямбда-исчисление).
- Задачи: как в первой группе.
- ДЗ — задачи с последней страницы документа с практики.
- Мягкий дедлайн: 13.09 22:00, жёсткий дедлайн: 14.09 14:40.
- Обещанный разбор задач про числа Чёрча: тык.
- Пратика 14.09 (рекурсия).
- Практика 21.09 (просто типизированное лямбда-исчисление)
Практика Жаворонков
Материалы с занятий и домашние задания:
- Семинар и домашнее задание 1 (Дедлайн(мягкий): 13.09.2020 21:00:00)
- Семинар и домашнее задание 2 (Дедлайн(мягкий): 20.09.2020 21:00:00)
- Семинар и домашнее задание 3 (Дедлайн(мягкий): 27.09.2020 21:00:00)
- Код с пары 28.09.2020
- Код с пары 05.10.2020
- Код с пары 12.10.2020
- Код с пары 05.11.2020
- Код с пары 06.11.2020
- Код с пары 13.11.2020
- Код с пары 20.11.2020
- Код с пары 27.11.2020
- Код c пары 01.12.2020 и 04.12.2020
- Код с пары 08.12.2020
- Код для пары 11.12.2020
Правила игры и прочее
Сдача домашних заданий
- Первые три -- мне на почту. Формат -- pdf(LaTeX)
- Следующие -- в приватный курс на степике. Если не зарегистрированы, то зарегистрируйтесь и укажите свои настоящие инициалы. Ссылка-инвайт на курс --тык
Дедлайны
- Мягкий -- указан в строке с соответствующим заданием. Если присылаете до него -- я смотрю, отвечаю и можно один раз прислать исправления.
- Жесткий -- наступает в момент начала пары. Присылать после мягкого, но до жесткого дедлайна можно и нужно, я не снижаю баллы, но не гарантирую, что буду принимать исправления
Оценка за практику
Оценка за практику расчитывается по таблице ниже
% | баллов из 10 |
64 | 2 |
65 | 3 |
67 | 4 |
70 | 5 |
75 | 6 |
80 | 7 |
85 | 8 |
90 | 9 |
98 | 10 |