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

Материал из CSC Wiki
Перейти к:навигация, поиск
(Материалы)
(Слайды)
 
(не показано 14 промежуточных версий 2 участников)
Строка 6: Строка 6:
  
 
=== Слайды ===
 
=== Слайды ===
 +
 +
'''Модуль 1'''
  
 
[[Медиа:Fpc01HSE2020.pdf|Лекция 1. Лямбда-исчисление]] 04.09.2020 (пт) 9:30-10:50 online
 
[[Медиа:Fpc01HSE2020.pdf|Лекция 1. Лямбда-исчисление]] 04.09.2020 (пт) 9:30-10:50 online
Строка 13: Строка 15:
 
[[Медиа:Fpc03HSE2020.pdf|Лекция 3. Просто типизированное лямбда-исчисление]] 18.09.2020 (пт) 9:30-10:50 online
 
[[Медиа:Fpc03HSE2020.pdf|Лекция 3. Просто типизированное лямбда-исчисление]] 18.09.2020 (пт) 9:30-10:50 online
  
[[Медиа:Fpc04HSE2020.pdf|Лекция 4. Введение в Haskell]] 25.09.2020 (пт) 9:30-10:50 online
+
[[Медиа:Fpc04HSE2020.pdf|Лекция 4. Введение в Haskell]] 25.09.2020 (пт) 9:30-10:50 online  
 +
([https://gist.github.com/deniok/a6883602c323d3237293492ca9319115 исходный код со слайдов])
  
 
[[Медиа:Fpc05HSE2020.pdf|Лекция 5. Типы данных]] 02.10.2020 (пт) '''8:50'''-10:50 online
 
[[Медиа:Fpc05HSE2020.pdf|Лекция 5. Типы данных]] 02.10.2020 (пт) '''8:50'''-10:50 online
 +
([https://gist.github.com/deniok/43e48f8eea5c4766cda72afc7800f1cf исходный код со слайдов])
  
 
[[Медиа:Fpc06HSE2020.pdf|Лекция 6. Классы типов]]  09.10.2020 (пт) 9:30-10:50 online
 
[[Медиа:Fpc06HSE2020.pdf|Лекция 6. Классы типов]]  09.10.2020 (пт) 9:30-10:50 online
 +
([https://gist.github.com/deniok/5c93628c762df8a11ebfe57db676898b исходный код со слайдов])
  
 
[[Медиа:Fpc07HSE2020.pdf|Лекция 7. Свертки]]  16.10.2020 (пт) 9:30-10:50 online
 
[[Медиа:Fpc07HSE2020.pdf|Лекция 7. Свертки]]  16.10.2020 (пт) 9:30-10:50 online
 +
([https://gist.github.com/deniok/19c37babda0f721598d47e0f565fc263 исходный код со слайдов])
 +
 +
'''Модуль 2'''
  
[[Медиа:Fpc08HSE2020.pdf|Лекция 8. Аппликативные функторы]] 23.10.2020 (пт) 9:30-10:50 online
+
[[Медиа:Fpc08HSE2020.pdf|Лекция 8. Аппликативные функторы]] 06.11.2020 (пт) 9:30-10:50 online
 +
([https://gist.github.com/deniok/18d7320c1c6136fed32a0bd6b58cc48f исходный код со слайдов])
  
[[Медиа:Fpc09HSE2020.pdf|Лекция 9. Использование аппликативных функторов]] 30.10.2020 (пт) 9:30-10:50 online
+
[[Медиа:Fpc09HSE2020.pdf|Лекция 9. Использование аппликативных функторов]] 13.11.2020 (пт) 9:30-10:50 online
  
[[Медиа:Fpc10HSE2020.pdf|Лекция 10. Монады]] 06.11.2020 (пт) 9:30-10:50 online
+
[[Медиа:Fpc10HSE2020.pdf|Лекция 10. Монады]] 20.11.2020 (пт) 9:30-10:50 online
  
[[Медиа:Fpc11HSE2020.pdf|Лекция 11. Стандартные монады]] 13.11.2020 (пт) 9:30-10:50 online
+
[[Медиа:Fpc11HSE2020.pdf|Лекция 11. Стандартные монады]] 27.11.2020 (пт) 9:30-10:50 online
  
[[Медиа:Fpc12HSE2020.pdf|Лекция 12. Трансформеры монад]]  20.11.2020 (пт) 9:30-10:50 online
+
[[Медиа:Fpc12HSE2020.pdf|Лекция 12. Трансформеры монад]]  04.12.2020 (пт) 9:30-10:50 online
  
[[Медиа:Fpc13HSE2020.pdf|Лекция 13. Алгоритм вывода типов]] 27.11.2020 (пт) 9:30-10:50 online
+
[[Медиа:Fpc13HSE2020.pdf|Лекция 13. Алгоритм вывода типов]] 11.12.2020 (пт) 9:30-10:50 online
  
[[Медиа:Fpc14HSE2020.pdf|Лекция 14. Рекурсивные типы]] 04.12.2020 (пт) 9:30-10:50 online
+
[[Медиа:Fpc14HSE2020.pdf|Лекция 14. Рекурсивные типы]] 18.12.2020 (пт) 9:30-10:50 online
  
[[Медиа:Fpc15HSE2020.pdf|Лекция 15. Молнии и линзы]] 11.12.2020 (пт) 9:30-10:50 online
+
[[Медиа:Fpc15HSE2020.pdf|Лекция 15. Молнии и линзы]] 18.12.2020 (пт) 9:30-10:50 online
  
 
=== Полезные ссылки ===
 
=== Полезные ссылки ===
Строка 111: Строка 120:
  
  
[[Медиа:Fpc03prHSE2020.pdf|Практика 3. Просто типизированное лямбда-исчисление]] 21.09.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc03prHSE2020.pdf|Практика 3. Просто типизированное лямбда-исчисление]] 21.09.2020 (пн) 18:10-19:30 online
  
 
[[Медиа:Fpc03taskHSE2020.tex|ДЗ 3. Исходник в TeX]] (предпочтительный формат сдаваемого ДЗ - pdf)
 
[[Медиа:Fpc03taskHSE2020.tex|ДЗ 3. Исходник в TeX]] (предпочтительный формат сдаваемого ДЗ - pdf)
Строка 120: Строка 129:
  
  
[[Медиа:Fpc04prHSE2020.pdf|Практика 4. Введение в Haskell]] 28.09.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc04prHSE2020.pdf|Практика 4. Введение в Haskell]] 28.09.2020 (пн) 18:10-19:30 online
  
[[Медиа:Fpc05prHSE2020.pdf|Практика 5. Программирование на Haskell]] 05.10.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc05prHSE2020.pdf|Практика 5. Стандартные списки]] 05.10.2020 (пн) 18:10-19:30 online
  
[[Медиа:Fpc06prHSE2020.pdf|Практика 6. Классы типов]]  12.10.2020 (пн) 14:40-16:00
+
[[Медиа:Fpc06prHSE2020.pdf|Практика 6. Классы типов]]  12.10.2020 (пн) 18:10-19:30  online
  
[[Медиа:Fpc07prHSE2020.pdf|Практика 7. Полугруппы, моноиды, свертки]]  19.10.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc07prHSE2020.pdf|Практика 7. Полугруппы, моноиды, свертки]]  02.11.2020 (пн) 18:10-19:30
  
[[Медиа:Fpc08prHSE2020.pdf|Практика 8. Аппликативные функторы]] 26.10.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc08prHSE2020.pdf|Практика 8. Аппликативные функторы]] 09.11.2020 (пн) 18:10-19:30
  
[[Медиа:Fpc09prHSE2020.pdf|Практика 9. Траверсы, парсеры, моноидальные функторы]] 02.11.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc09prHSE2020.pdf|Практика 9. Траверсы, парсеры, моноидальные функторы]] 16.11.2020 (пн) 18:10-19:30
  
[[Медиа:Fpc10prHSE2020.pdf|Практика 10. Монады]] 09.11.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc10prHSE2020.pdf|Практика 10. Монады]] 23.11.2020 (пн) 18:10-19:30
  
[[Медиа:Fpc11prHSE2020.pdf|Практика 11. Стандартные монады]] 16.11.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc11prHSE2020.pdf|Практика 11. Стандартные монады]] 30.11.2020 (пн) 18:10-19:30
  
[[Медиа:Fpc12prHSE2020.pdf|Практика 12. Трансформеры монад]] 23.11.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc12prHSE2020.pdf|Практика 12. Трансформеры монад]] 07.12.2020 (пн) 18:10-19:30
  
[[Медиа:Fpc13prHSE2020.pdf|Практика 13. Алгоритм вывода типов]] 30.11.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc13prHSE2020.pdf|Практика 13. Алгоритм вывода типов]] 14.12.2020 (пн) 18:10-19:30
  
[[Медиа:Fpc14prHSE2020.pdf|Практика 14. Рекурсивные типы]] 07.12.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc14prHSE2020.pdf|Практика 14. Рекурсивные типы]] 21.12.2020 (пн) 18:10-19:30
  
[[Медиа:Fpc15prHSE2020.pdf|Практика 15. Молнии и линзы]] [https://gist.github.com/deniok/5c8cd1f6f1ce6d92c9c71ddb68648fff исходник для практики] 14.12.2020 (пн) 18:10-19:30
+
[[Медиа:Fpc15prHSE2020.pdf|Практика 15. Молнии и линзы]] [https://gist.github.com/deniok/5c8cd1f6f1ce6d92c9c71ddb68648fff исходник для практики] 21.12.2020 (пн) 18:10-19:30
  
 
Практика 16. Тестирование 21.12.2020 (пн) 18:10-19:30
 
Практика 16. Тестирование 21.12.2020 (пн) 18:10-19:30
Строка 217: Строка 226:
 
* [[Медиа:Fp-2020-sem02.zip|Семинар и домашнее задание 2]] ('''Дедлайн(мягкий): 20.09.2020 21:00:00''')
 
* [[Медиа:Fp-2020-sem02.zip|Семинар и домашнее задание 2]] ('''Дедлайн(мягкий): 20.09.2020 21:00:00''')
 
* [[Медиа:Fp-2020-sem03.zip|Семинар и домашнее задание 3]] ('''Дедлайн(мягкий): 27.09.2020 21:00:00''')
 
* [[Медиа:Fp-2020-sem03.zip|Семинар и домашнее задание 3]] ('''Дедлайн(мягкий): 27.09.2020 21:00:00''')
 +
* [[Медиа:Fp-2020-sem04.zip|Код с пары 28.09.2020]]
 +
* [[Медиа:Fp-2020-sem05.zip|Код с пары 05.10.2020]]
 +
* [[Медиа:Fp-2020-sem06.zip|Код с пары 12.10.2020]]
  
 
=== Правила игры и прочее ===
 
=== Правила игры и прочее ===
Строка 222: Строка 234:
  
 
* Первые три -- мне на почту. Формат -- pdf(LaTeX)
 
* Первые три -- мне на почту. Формат -- pdf(LaTeX)
* TBD
+
* Следующие -- в приватный курс на степике. Если не зарегистрированы, то зарегистрируйтесь и укажите свои настоящие инициалы. Ссылка-инвайт на курс --[https://stepik.org/invitation/1c9d27b77853f159f646b12bb343a3415002d7a2/ тык]
  
 
==== Дедлайны ====
 
==== Дедлайны ====

Текущая версия на 13:27, 25 октября 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. Стандартные монады 27.11.2020 (пт) 9:30-10:50 online

Лекция 12. Трансформеры монад 04.12.2020 (пт) 9:30-10:50 online

Лекция 13. Алгоритм вывода типов 11.12.2020 (пт) 9:30-10:50 online

Лекция 14. Рекурсивные типы 18.12.2020 (пт) 9:30-10:50 online

Лекция 15. Молнии и линзы 18.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


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. Полугруппы, моноиды, свертки 02.11.2020 (пн) 18:10-19:30

Практика 8. Аппликативные функторы 09.11.2020 (пн) 18:10-19:30

Практика 9. Траверсы, парсеры, моноидальные функторы 16.11.2020 (пн) 18:10-19:30

Практика 10. Монады 23.11.2020 (пн) 18:10-19:30

Практика 11. Стандартные монады 30.11.2020 (пн) 18:10-19:30

Практика 12. Трансформеры монад 07.12.2020 (пн) 18:10-19:30

Практика 13. Алгоритм вывода типов 14.12.2020 (пн) 18:10-19:30

Практика 14. Рекурсивные типы 21.12.2020 (пн) 18:10-19:30

Практика 15. Молнии и линзы исходник для практики 21.12.2020 (пн) 18:10-19:30

Практика 16. Тестирование 21.12.2020 (пн) 18:10-19:30

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

Кайсин Илья Сергеевич @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)
  • Следующие -- в приватный курс на степике. Если не зарегистрированы, то зарегистрируйтесь и укажите свои настоящие инициалы. Ссылка-инвайт на курс --тык

Дедлайны

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