Функциональное программирование 2MIT осень 2021

Материал из CSC Wiki
Перейти к:навигация, поиск

Лекции

Преподаватель: Москвин Денис Николаевич dmoskvin@gmail.com

Пожалуйста, указывайте в теме письма FPHSE.

Вопросы к экзамену.

Слайды

Модуль 1

Лекция 1. Лямбда-исчисление 07.09.2021 (вт) 11:10-12:30

Лекция 2. Рекурсия и редукция 14.09.2021 (вт) 11:10-12:30

Лекция 3. Просто типизированное лямбда-исчисление 21.09.2021 (вт) 11:10-12:30

Лекция 4. Введение в Haskell 28.09.2021 (вт) 11:10-12:30 (исходный код со слайдов)

Лекция 4'. Операторы, форсирование, списки. Лекция виртуальная, собирается из трех ссылок: операторы и их сечения, ленивость и строгость, стандартные списки. (исходный код со слайдов)

Лекция 5. Типы данных 05.10.2021 (вт) 11:10-12:30 (исходный код со слайдов)

Лекция 6. Классы типов 12.10.2021 (вт) 11:10-12:30 (исходный код со слайдов) Тему про дополнительные сведения о типах данных можно посмотреть по ссылке

Лекция 7. Свертки 19.10.2021 (вт) 11:10-12:30 (исходный код со слайдов)

Модуль 2

Лекция 8. Аппликативные функторы 09.11.2021 (вт) 11:10-12:30 (исходный код со слайдов)

Лекция 9. Использование аппликативных функторов 09.11.2021 (вт) 14:40-16:00 (исходный код со слайдов)

Лекция 10. Монады 16.11.2021 (вт) 11:10-12:30 (исходный код со слайдов)

Лекция 11. Стандартные монады 16.11.2021 (вт) 14:40-16:00 (исходный код со слайдов)

Лекция 12. Трансформеры монад 23.11.2021 (вт) 11:10-12:30 (исходный код со слайдов)

Лекция 13. Алгоритм вывода типов 23.11.2021 (вт) 14:40-16:00

Лекция 14. Рекурсивные типы 30.11.2021 (вт) 14:40-16:00 (исходный код со слайдов)

Лекция 15. Молнии и линзы 07.12.2021 (вт) 14:40-16:00 (исходный код: молнии) (исходный код: линзы) (исходный код: библиотечные линзы)

Полезные ссылки

Hoogle

Typeclassopedia

Haskell 2010 Language Report

Learn You a Haskell for Great Good!

Полезными могут оказаться конспекты лекций по теоретической и практической (новая версия) частям курса. Это расширенные версии слайдов, с дополнительными примерами и рассуждениями. (Предупреждение: они неполные и представляют собой раннюю альфу!)

Практика Москвин

Преподаватель: Москвин Денис Николаевич dmoskvin@gmail.com

Пожалуйста, указывайте в теме письма FPHSE.

Финальный дедлайн по всем домашним заданиям 12.12.2021 (вс) 23:59.

Дальше до 17.12.2021 (пт) 23:59 происходят всякие досдачи хвостов. После этого фиксируется финальная оценка за практику.

Дедлайн по одному домашнему заданию на степике можно пропустить без последствий. Остальные задания, сданные после дедлайна засчитываются с дисконтирующим множителем, равным 0.75. Если у кого-то есть уважительная причина в виде, например, болезни, подтвержденной учебным офисом, то не стесняйтесь напомнить мне, если я не учел этого при вычислении итоговой оценки.

Текущая успеваемость

Таблица с результатами

Проценты переводятся в баллы следующей функцией

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 она тоже теперь работает, через PowerShell.

(Раньше под Windows я рекомендовал скачать и запустить установщик Haskell Platform 8.6.5 Хотя эта версия двухгодичной давности, для наших учебных целей она вполне подойдет. "Официальный" способ установки под Windows требует колдовства с над Chocolatey, мне оно не удается.)

Домашние задания на stepik.org

Для выполнения домашних заданий по Haskell следует:

  • Если вы ранее не обучались на Stepik, зарегистрироваться тут. Если ваш никнейм на Stepik не позволяет опознавать вас без сложных исследований, пожалуйста, сообщите мне о своей связи с ним.

Модули с текущим домашним заданием будут становиться доступными по мере прохождения курса, дедлайны будут видны там же.

Отметим, что проверяющая система на Stepik использует GHC 8.8.4. Не пользуйтесь, пожалуйста, при сдаче домашних заданий более новыми расширениями языка и библиотек.

Материалы

Модуль 1

Практика 1. Чистое лямбда-исчисление как язык программирования 07.09.2021 (вт) 13:00-14:20

ДЗ 1. Исходник в TeX (предпочтительный формат сдаваемого ДЗ - pdf)

Мягкий дедлайн 13.09.2021 22:00. При наличии ошибок можно 1 раз переделать до жесткого дедлайна.

Жесткий дедлайн 14.09.2021 11:10. Решения, присланные после этого срока, не проверяются.


Практика 2. Рекурсия и редукция 14.09.2021 (вт) 13:00-14:20

ДЗ 2. Исходник в TeX (предпочтительный формат сдаваемого ДЗ - pdf)

Мягкий дедлайн 20.09.2021 22:00. При наличии ошибок можно 1 раз переделать до жесткого дедлайна.

Жесткий дедлайн 21.09.2021 11:10. Решения, присланные после этого срока, не проверяются.


Практика 3. Просто типизированное лямбда-исчисление 21.09.2021 (вт) 13:00-14:20

ДЗ 3. Исходник в TeX (предпочтительный формат сдаваемого ДЗ - pdf)

Мягкий дедлайн 27.09.2021 22:00. При наличии ошибок можно 1 раз переделать до жесткого дедлайна.

Жесткий дедлайн 28.09.2021 11:10. Решения, присланные после этого срока, не проверяются.


Практика 4. Введение в Haskell 28.09.2021 (вт) 13:00-14:20

Практика 5. Стандартные списки 05.10.2021 (вт) 13:00-14:20

Практика 6. Реализация представителей стандартных классов типов 12.10.2021 (вт) 13:00-14:20

Практика 7. Полугруппы, моноиды, свертки 19.10.2021 (вт) 13:00-14:20

Модуль 2

Практика 8. Аппликативные функторы 09.11.2021 (вт) 13:00-14:20 (исходный код для практики)

Практика 9. Траверсы, парсеры, моноидальные функторы 09.11.2021 (вт) 16:20-17:40 (исходный код для практики)

Практика 10. Монады 16.11.2021 (вт) 13:00-14:20 (исходный код для практики)

Практика 11. Стандартные монады 16.11.2021 (вт) 16:20-17:40 (исходный код для практики)

Практика 12. Трансформеры монад 23.11.2021 (вт) 13:00-14:20 (исходный код для практики)

Практика 13. Алгоритм вывода типов 23.11.2021 (вт) 16:20-17:40

Практика 14. Рекурсивные типы 30.11.2021 (вт) 16:20-17:40 (исходный код для практики)

Практика 15. Молнии и линзы 07.12.2021 (вт) 16:20-17:40 (исходный код для практики: молнии) (исходный код для практики: линзы)


Практика 16. Тестирование 12.12.2021 (вс) 11:00-12:30 online, Stepik

Практика Кайсин

Кайсин Илья Сергеевич

Чат в ТГ

Таблица результатов

Домашки и вопросы в ТГ: @dmrkk

Система оценивания

Как у группы Дениса Николаевича

Практики и задания

Жесткий дедлайн (нельзя исправлять) -- следующая пара

Мягкий дедлайн (можно исправлять) -- сутки до следующей пары

Все материалы практик и домашние задания

Практика Алфёров

Почта для домашек: teaching@vasalf.net

Телега для телег: @vasiliyalferov

Табличка: тык

Форма для записи на код-ревью: тык (закрывается 24.09.2021 23:59)

Инвайт на степик: тык

Правила

  • Сумма баллов делится на сумму баллов Идеала Идеаловича, получается число a.
  • Оценка рассчитывается по формуле:
 (a - 0.5) * 20 
  • Округление математическое.
  • Задачи со степика принимаются после дедлайна с множителем 0.5 (пните меня в телеге, чтобы я это заметил).

Теория

  • Практика 07.09.2021
    • ДЗ — как в первой группе. +1 балл за самую короткую из возможных реализацию pow.
    • Мягкий дедлайн 11.09.2021 22:00. Гарантированная проверка 12.09.2021 00:01.
    • Жёсткий дедлайн 14.09.2021 13:00.
  • Практика 14.09.2021
    • ДЗ: тык, исходник
    • Мягкий дедлайн 19.09.2021 09:00. Гарантированная проверка 19.09.2021 11:01.
    • Жёсткий дедлайн 21.09.2021 13:00.
  • Практика 21.09.2021
    • ДЗ: тык, исходник
    • Мягкий дедлайн 25.09.2021 22:00. Гарантированная проверка 25.09.2021 00:01.
    • Жёсткий дедлайн 28.09.2021 13:00.

Практика

ДЗ на степике. Дедлайн до пары, если не сказано иного.

  • Практика 28.09.2021
    • Дедлайн 06.09.2021 23:59.
  • Практика 05.10.2021

Код-ревью

  • Код-ревью происходит один раз в неделю вскоре после дедлайна. Как правило, это будет вечер вторника, но иногда я буду этот дедлайн самому себе переносить (постараюсь рассказать об этом как можно раньше, и не переносить дальше, чем на вечер среды). После проверки можно исправлять до следующего дедлайна.
  • Для опционального код-ревью: вне зависимости от код-ревью задача засчитывается, если она полностью прошла тесты на степике.
  • Для обязательного код-ревью: каждая задача со степика оценивается отдельно. Частичных баллов не бывает, задача либо полностью зачтена, либо полностью не зачтена. Незачтённые задачи можно исправлять итеративно до последнего дедлайна, проверка будет вместе со всей остальной домашкой раз в неделю. Решённые, но незачтённые задачи обозначаются в табличке вопросиками.
  • Изменить своё решение можно в любой момент в личке в телеге.

Бот

  • Бот живёт по адресу https://fp.vasalf.net
  • Исходники бота: тык
  • Бот проверяет, что решение действительно проходит тесты на степике.
  • Бот написан на коленке за выходные. Пожалуйста, не обижайте и не перегружайте его. Сначала тестируйте ваши решения на степике, а потом уже засылайте на гитхаб.

Практика Жаворонков

Почта

Телега

Успеваемость

Правила

  • Первые три домашних задания сдаются в формате PDF мне на почту. Можно использовать LaTeX или Markdown(понадобится pandoc)
  • Последующие -- в курс на stepik.org. Укажите при регистрации ваши настоящие имя и фамилию. Ссылка-приглашение на курс -- тык
  • Мягкий дедлайн -- если у меня возникнут замечания к решению, то можно один раз прислать исправления
  • Жесткий дедлайн -- решения присланные после него не будут проверять.

Материалы

  • Листок с пары 07.09.2021 и домашнее задание -- pdf. Мягкий дедлайн -- 13.09.2021 21:00. Жесткий дедлайн -- 14.09.2021 13:00
  • Листок с пары 14.09.2021 и домашнее задание -- pdf. Мягкий дедлайн -- 20.09.2021 21:00. Жесткий дедлайн -- 21.09.2021 13:00
  • Листок с пары 21.09.2021 и домашнее задание -- pdf. Мягкий дедлайн -- 27.09.2021 21:00. Жесткий дедлайн -- 28.09.2021 13:00
  • Код для пары 05.10.2021 -- zip
  • Код для пары 12.10.2021 -- zip
  • Код для пары 19.10.2021 -- zip
  • Код с первой пары 09.11.2021 -- zip
  • Код со второй пары 09.11.2021 -- zip
  • Код с первой пары 16.11.2021 -- zip
  • Код со второй пары 16.11.2021 -- zip
  • Код с первой пары 23.11.2021 -- zip
  • Код c пары 30.11.2021 -- zip
  • Код для пары 07.12.2021 -- zip

Оценка за практику

Оценка за практику расчитывается по таблице ниже

% баллов из 10
64 2
65 3
67 4
70 5
75 6
80 7
85 8
90 9
98 10