Функциональное программирование 22-23 — различия между версиями
Материал из Wiki - Факультет компьютерных наук
TurtlePU (обсуждение | вклад) (→Домашние задания) |
TurtlePU (обсуждение | вклад) (→Setting up) |
||
Строка 50: | Строка 50: | ||
<li>Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь].</li> | <li>Инструкцию для других сред можно найти [https://haskell-language-server.readthedocs.io/en/latest/configuration.html#configuring-your-editor здесь].</li> | ||
</ul> | </ul> | ||
+ | </li> | ||
+ | <li>Опционально — установите [https://hoogle.haskell.org Hoogle] локально: | ||
+ | <ol> | ||
+ | <li>`cabal install hoogle`</li> | ||
+ | <li> | ||
+ | Допишите в файл `~/.ghci` следующее:<pre> | ||
+ | :def hoogle \x -> return $ ":!hoogle \"" ++ x ++ "\"" | ||
+ | :def doc \x -> return $ ":!hoogle --info \"" ++ x ++ "\"" | ||
+ | </li> | ||
+ | <li>Теперь можно пользоваться Hoogle прямо из ghci с помощью команд `:hoogle` и `:doc`</li> | ||
+ | </ol> | ||
</li> | </li> | ||
</ol> | </ol> |
Версия 13:14, 11 октября 2022
Содержание
[убрать]Функциональное программирование
Курс по выбору для студентов 3 и 4 курса ФКН ВШЭ, 1 и 2 модуль 2022 г. Функциональное программирование (ФП) представляет собой теоретически изящный, выдержавший проверку временем на практике и оказавший заметное влияние на технологии программирования вообще подход к созданию ПО. Курс посвящен основам ФП в целом и популярного языка Haskell в частности. Попутно сообщаются начальные сведения из области лямбда-исчислений, теории типов, теории категорий.
Преподаватели
Лектор и семинарист: Евгений Дашков, ТГ: @edashkov, edashkov@gmail.com.
Семинарист: Павел Соколов, ТГ: @TurtlePU.
Учебный ассистент: Олег Мкртчян, ТГ: @unwishfulthinking.
Текущая успеваемость
Setting up
- Если вы пользуетесь Windows, установите WSL2, если ещё не.
-
Установите ghcup — скачайте бинарный файл сами
либо введите одну любимую команду:
- MacOS:
brew install ghcup
- Arch-based distros:
yay -S ghcup-hs-bin
- WSL2, MacOS >= 10.13, Linux:
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
- Windows Powershell (cringe): Команда доступна по ссылке
- MacOS:
- Убедитесь, что путь до места установки
ghcup
содержится в$PATH
— запуститеghcup list
. -
Установите
recommended
версии компилятора, пакетного менеджера и языкового сервера:ghcup install ghc recommended ghcup install cabal recommended ghcup install hls recommended
- Убедитесь, что путь
~/.ghcup/bin
содержится в$PATH
. При необходимости добавьте этот путь сами. -
Создайте символические ссылки на установленные версии программ:
ghcup set ghc recommended ghcup set cabal recommended ghcup set hls recommended
-
Настройте LSP client в своей любимой среде разработки:
- Для VS Code есть плагин, он должен обнаружить HLS самостоятельно.
- В NeoVim настройте nvim-lspconfig, он знает про HLS.
- Инструкцию для других сред можно найти здесь.
- Опционально — установите Hoogle локально:
- `cabal install hoogle`
-
Допишите в файл `~/.ghci` следующее:
:def hoogle \x -> return $ ":!hoogle \"" ++ x ++ "\"" :def doc \x -> return $ ":!hoogle --info \"" ++ x ++ "\"" </li> <li>Теперь можно пользоваться Hoogle прямо из ghci с помощью команд `:hoogle` и `:doc`</li> </ol> </li> </ol> == Листки и код для семинаров == * [https://drive.google.com/file/d/1Vm69QFV5XFgDozPM9hGp1teFdwjUdyLU/view?usp=sharing Листок 1] * [https://drive.google.com/file/d/1xFLVoKjOGxooPTP66noHA0KFxosjFkkL/view?usp=sharing Листок 2] == Домашние задания == Домашние задания выдаются приблизительно раз в две недели; при выдаче каждого задания указывается срок его сдачи. Все задания письменные. Каждая задача оценивается 0, ½ или 1 баллом. Все задания в целом оцениваются числом: ДЗ = (сумма полученных баллов за все задачи) / (количество выданных задач). {| class="wikitable" |- ! Набор задач !! colspan="11" | Срок сдачи |- | || гр. Дашкова || гр. Соколова |- |[https://drive.google.com/file/d/1MBSr_Ryb9Xw7HxYUU1vC6WfMHF_YJh9f/view?usp=sharing ДЗ 1] || 20.09 || 20.09 |- |[https://drive.google.com/file/d/1IK0SZGj78veayMS6_1BS7lT9HncbNwTY/view?usp=sharing ДЗ 2] || 11.10 || 11.10 |} '''Срок сдачи задания устанавливается семинаристом группы.''' '''Ссылка на классрум''': [https://classroom.google.com/c/OTM4MjAyNzk1MTda?cjc=xbblft6 https://classroom.google.com/c/OTM4MjAyNzk1MTda?cjc=xbblft6] == Контрольная работа == Письменная Контрольная работа проводится в начале второго модуля. Допускается использование собственных записей студента и явно разрешенных локальных справочных систем. Каждая задача оценивается 0, ½ или 1 баллом. Контрольная оцениваются числом: КР = (сумма полученных баллов за все задачи) / (количество выданных задач). == Итоговый экзамен == Письменный экзамен проводится в конце курса. Допускается использование собственных записей студента и явно разрешенных локальных справочных систем. Каждая задача оценивается 0, ¼, ½ , ¾ или 1 баллом. Экзамен оценивается числом: Э = (сумма полученных баллов за все задачи) / (количество выданных задач). == Индивидуальный проект == При желании студенты согласовывают с семинаристом проект для индивидуальной работы. Также допускается работа в группах до трех человек. Проект представляет собой решение достаточно сложной задачи по программированию и предполагает самостоятельное получение недостающих сведений. Проекты должны быть сданы до 15-го декабря. За проект выставляется (дробная) оценка ПР от 0 до 1 балла. ==== Некоторые темы для проектов ==== == Материалы == [https://t.me/+0xll5HN3Y1k0ZDRi Группа слушателей курса в ТГ] [https://drive.google.com/drive/folders/1Ut4Tv4CkaMhC-8Mqxh4gK5WjaN3LkgUR?usp=sharing Материалы Е.В. Дашкова] ==== Базовые ресурсы ==== [https://www.haskell.org/ Сайт языка] [https://docs.haskellstack.org/en/stable/README/ Haskell Tool Stack] [https://www.haskell.org/cabal/ Информация про Cabal] [https://www.haskell.org/hoogle/ Hoogle] [https://hackage.haskell.org/ Hackage] [http://hackage.haskell.org/package/base/ Стандартная библиотека языка Haskell на Hackage] ==== Книги и статьи ==== [http://learnyouahaskell.com/ Learn You a Haskell for Great Good] [http://book.realworldhaskell.org/read/ Real World Haskell] [https://mathtrielhighschool.files.wordpress.com/2011/08/number-theory.pdf Basic Simple Type Theory] [https://disi.unitn.it/~bernardi/RSISE11/Papers/curry-howard.pdf Lectures on the Curry-Howard Isomorphism] [https://doc.lagout.org/programmation/Functional%20Programming/Chris_Okasaki-Purely_Functional_Data_Structures-Cambridge_University_Press%281998%29.pdf Purely Functional Data Structures.] '''Нет в открытом доступе''' [https://www.cs.nott.ac.uk/~pszgmh/pih.html Programming in Haskell by Graham Hutton] [https://mitpress.mit.edu/9780262660716/ Basic Category Theory for Computer Scientists by Benjamin C. Pierce] == Оценки == Итоговая оценка получается так: Итог = ОКРУГЛ (2 * ПР + 2 * КР + 3 * ДЗ + 3 * Э). Округление производится к ближайшему целому, притом что полуцелые значения округляются вверх.