Функциональное программирование 2MIT осень 2020 — различия между версиями

Материал из CSC Wiki
Перейти к:навигация, поиск
(Практика Москвин)
(Лекции)
 
(не показана 21 промежуточная версия 2 участников)
Строка 3: Строка 3:
  
 
Пожалуйста, указывайте в теме письма FPHSE.
 
Пожалуйста, указывайте в теме письма FPHSE.
 +
 +
[[Медиа:QExamHSE2020.pdf|Вопросы к экзамену]]
 +
 +
[https://docs.google.com/spreadsheets/d/10jLNht6WuQ8OByGI1Udd0cS9ojEep3oEWYiQWHUMtnM/edit#gid=927409064 Ссылка для записи на экзамен для Группы 1 (17.12.2020)]
 +
 +
[https://docs.google.com/spreadsheets/d/10jLNht6WuQ8OByGI1Udd0cS9ojEep3oEWYiQWHUMtnM/edit#gid=0 Ссылка для записи на экзамен для Группы 2 (15.12.2020)]
  
  
Строка 42: Строка 48:
  
 
[[Медиа:Fpc12HSE2020.pdf|Лекция 12. Трансформеры монад]]  27.11.2020 (пт) 9:30-10:50 online
 
[[Медиа:Fpc12HSE2020.pdf|Лекция 12. Трансформеры монад]]  27.11.2020 (пт) 9:30-10:50 online
([https://gist.github.com/deniok/dbd90777da0212aa7671002be8875abd исходный код со слайдов])
+
([https://gist.github.com/deniok/dbd90777da0212aa7671002be8875abd исходный код со слайдов], [https://gist.github.com/deniok/40f85fde4174f2c0d702d3db7b128723 еще])
  
 
[[Медиа:Fpc13HSE2020.pdf|Лекция 13. Алгоритм вывода типов]] 03.12.2020 (чт) 9:30-10:50 online
 
[[Медиа:Fpc13HSE2020.pdf|Лекция 13. Алгоритм вывода типов]] 03.12.2020 (чт) 9:30-10:50 online
  
 
[[Медиа:Fpc14HSE2020.pdf|Лекция 14. Рекурсивные типы]] 04.12.2020 (пт) 9:30-10:50 online
 
[[Медиа:Fpc14HSE2020.pdf|Лекция 14. Рекурсивные типы]] 04.12.2020 (пт) 9:30-10:50 online
 +
([https://gist.github.com/deniok/346cab59c4dcd6e5968f956ab7f76c58 исходный код со слайдов])
  
 
[[Медиа:Fpc15HSE2020.pdf|Лекция 15. Молнии и линзы]] 11.12.2020 (пт) 9:30-10:50 online
 
[[Медиа:Fpc15HSE2020.pdf|Лекция 15. Молнии и линзы]] 11.12.2020 (пт) 9:30-10:50 online
 +
([https://gist.github.com/deniok/af016087c5689e411137c170dbca4668 исходный код со слайдов: зипперы],
 +
[https://gist.github.com/deniok/19311094b31cfe3d3e88a97c8d7de2da реализация линз ван Ларховена],
 +
[https://gist.github.com/deniok/a6f61ef1d4e31adfcf96780dd17e8c97 работа со стандартными линзами])
  
 
=== Полезные ссылки ===
 
=== Полезные ссылки ===
Строка 79: Строка 89:
 
   | proc < 58 = 0
 
   | proc < 58 = 0
 
   | proc > 98 = 10
 
   | proc > 98 = 10
   | otherwise = ( proc - 58) `div` 4
+
   | 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: рекомендации по установке ===
Строка 154: Строка 166:
  
 
[[Медиа:Fpc12prHSE2020.pdf|Практика 12. Трансформеры монад]]  
 
[[Медиа:Fpc12prHSE2020.pdf|Практика 12. Трансформеры монад]]  
 +
([https://gist.github.com/deniok/25f19ac9883fb315f7222a75a8c9fa52 исходник для практики])
 
01.12.2020 (вт) 10:30-11:50 online
 
01.12.2020 (вт) 10:30-11:50 online
  
Строка 160: Строка 173:
  
 
[[Медиа:Fpc14prHSE2020.pdf|Практика 14. Рекурсивные типы]]  
 
[[Медиа:Fpc14prHSE2020.pdf|Практика 14. Рекурсивные типы]]  
 +
([https://gist.github.com/deniok/5a3f4674c2c9eaa19f522d1421126ee3 исходник для практики])
 
08.12.2020 (вт) 10:30-11:50 online
 
08.12.2020 (вт) 10:30-11:50 online
  
 
[[Медиа:Fpc15prHSE2020.pdf|Практика 15. Молнии и линзы]]  
 
[[Медиа:Fpc15prHSE2020.pdf|Практика 15. Молнии и линзы]]  
([https://gist.github.com/deniok/5c8cd1f6f1ce6d92c9c71ddb68648fff исходник для практики])
+
([https://gist.github.com/deniok/b3239c62a1587240cc02fa08b8a60d85 исходник для практики: зипперы],
 +
[https://gist.github.com/deniok/8e61aa40cfd6683d969ecccff81a64cf исходник для практики: линзы])
 
11.12.2020 (пт) 15:00-16:20 online
 
11.12.2020 (пт) 15:00-16:20 online
  
Практика 16. Тестирование 18.12.2020 (пт) 15:00-16:20
+
Практика 16. Тестирование '''13.12.2020 (вс) 11:00-12:30''' online, Stepik!!!
  
 
== Практика Кайсин ==
 
== Практика Кайсин ==
Строка 246: Строка 261:
 
* [[Медиа:Fp-2020-sem09.zip|Код с пары 13.11.2020]]
 
* [[Медиа:Fp-2020-sem09.zip|Код с пары 13.11.2020]]
 
* [[Медиа:Fp-2020-sem10.zip|Код с пары 20.11.2020]]
 
* [[Медиа:Fp-2020-sem10.zip|Код с пары 20.11.2020]]
 +
* [[Медиа:Fp-2020-sem11.zip|Код с пары 27.11.2020]]
 +
* [[Медиа:Fp-2020-sem12.zip|Код c пары 01.12.2020 и 04.12.2020]]
 +
* [[Медиа:Fp-2020-sem14.zip|Код с пары 08.12.2020]]
 +
* [[Медиа:Fp-2020-sem15.zip|Код с пары 11.12.2020]]
  
 
=== Правила игры и прочее ===
 
=== Правила игры и прочее ===

Текущая версия на 16:47, 15 декабря 2020

Лекции

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

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

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

Ссылка для записи на экзамен для Группы 1 (17.12.2020)

Ссылка для записи на экзамен для Группы 2 (15.12.2020)


Слайды

Модуль 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 (исходный код со слайдов: зипперы, реализация линз ван Ларховена, работа со стандартными линзами)

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

Hoogle

Typeclassopedia

Haskell 2010 Language Report

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

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

Инструкция по сдаче

Для первых трёх заданий:

  1. Заполните (??) в файле с заданием
  2. Отправьте на demarkok@gmail.com с темой hw01/hw02/hw03
  3. Основная часть простая, поэтому если с чем-то трудности, обязательно пишите на @dmrkk
  4. Звёздочки - это сложность
  5. Исправлять до мягкого дедлайна можно несколько раз

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

  1. Практика 1, Домашнее задание 1 (Жесткий дедлайн 14.09.2020 14:40, Мягкий дедлайн 13.09.2020 14:40)
  2. Практика 2, Домашнее задание 2 (Жёсткий дедлайн 21.09.2020 14:40, Мягкий дедлайн 20.09.2020 14:40)
  3. Практика как у первой группы, Домашнее задание 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 (рекурсия).
    • Задачи: как в первой группе.
    • ДЗ: тык.
    • Исходник ДЗ (TeX): тык (необязательный, но пусть будет).
    • Мягкий дедлайн: 20.09 22:00, жёсткий дедлайн: 21.09 14:40.
  • Практика 21.09 (просто типизированное лямбда-исчисление)
    • Задачи: как в первой группе.
    • ДЗ: тык.
    • Исходник ДЗ (TeX): тык (необязательный, но пусть будет).
    • Мягкий дедлайн: 27.09 22:00, жёсткий дедлайн: 28.09 14:40.

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

Почта

Телега

Таблица с успеваемостью

Материалы с занятий и домашние задания:

Правила игры и прочее

Сдача домашних заданий

  • Первые три -- мне на почту. Формат -- pdf(LaTeX)
  • Следующие -- в приватный курс на степике. Если не зарегистрированы, то зарегистрируйтесь и укажите свои настоящие инициалы. Ссылка-инвайт на курс --тык

Дедлайны

  • Мягкий -- указан в строке с соответствующим заданием. Если присылаете до него -- я смотрю, отвечаю и можно один раз прислать исправления.
  • Жесткий -- наступает в момент начала пары. Присылать после мягкого, но до жесткого дедлайна можно и нужно, я не снижаю баллы, но не гарантирую, что буду принимать исправления

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

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

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