Практикум по программированию на языке Haskell, кафедра АЯ 3 курс
Haskell - чисто функциональный язык программирования общего назначения.
Цель практикума - научиться создавать полноценные функциональные приложения.
Практикум включает:
- Семинары (с разбором задач и самостоятельными работами), которые поддерживаются видео-лекциями на YouTube
- Домашние задания к семинарам (решение задач)
- Письменную контрольную работу (начало апреля)
- Семестровое практическое задание
Оценка по практикуму зависит от набранной за семестр суммы баллов, которые начисляются за работу на семинарах, самостоятельные работы, домашние задания, контрольную работу и выполнение практического задания. За несоблюдение контрольных сроков выполнения задания баллы за задание могут снижаться. Все баллы вносятся в таблицу
Обязательное условие зачета по практикуму - положительная оценка за контрольную и выполнение практического задания.
Лекции на YouTube:
01-1 Функции высшего порядка
01-2 Свойства полиморфных функций
02-1 Ленивые вычисления
02-2 Функции над списками. Свертки
03-1 Алгебраические типы данных
03-2 Классы типов
03-3 Функторы
04-1 Моноиды
04-2 Моноидная свертка
05 Аппликативные функторы
Контрольные сроки выполнения практического задания:
7 марта - выбор варианта задания
21 марта - основные типы данных и функции (их сигнатуры) для решаемой задачи
4 апреля - реализация основных функций, прототип проекта
25 апреля - рабочее приложение
2 и 16 мая - отчет по заданию
Варианты практических заданий сообщаются студентам по почте.
Для инсталляции компилятора GHC и необходимых средств разработки: системы сборки Cabal и утилиты Stack следует придерживаться инструкций с официального сайта https://www.haskell.org/downloads/ для каждой платформы (Linux, macOS, Windows).
Требования к выполнению задания практикума
- Вариант задания должен быть утвержден преподавателем. Выполненное задание, для которого не был утвержден вариант, приниматься не будет. Допускаются инициативные варианты, если они подробно описаны студентом и согласованы с преподавателем.
В случае сложных вариантов возможно совместное выполнение задания двумя студентами, но необходимо это согласовать с преподавателем.
- В программе должны быть введены пользовательские типы для внутреннего представления обрабатываемых данных. Введенные типы данных и основные функции программы необходимо согласовать с преподавателем.
- Итоговое приложение должно быть организовано как проект с несколькими модулями (не менее 2, включая библиотечные), в качестве образца см. шаблон проекта
- Работа над заданием должна удовлетворять контрольным срокам, в ином случае возможно снижение балла за выполненное задание.
- Во время выполнения задания рекомендуется следовать методическим указаниям
- Реализованная программа принимается только в случае отсутствия в ней неприемлемых недостатков в коде, такие недостатки подлежат безусловному исправлению.
- По результатам выполнения задания должен быть составлен письменный отчет, включающий описание:
- функциональных возможностей созданного приложения
- основных типов данных и реализованных функций
- модульного состава проекта с указанием назначения каждого модуля
- сценариев работы пользователя с реализованным приложением.
Пример отчета и файл для LaTex
Дополнительные интернет-материалы
https://www.ohaskell.guide/ - "О Haskell по человечески" - русскоязычная книга по основам языка, доступно написанная
http://cmc-msu-ai.github.io/haskell-course/ - конспекты Н. Кудасова
https://al.cs.msu.ru/node/60 - лекции А.Носкова
http://learnyouahaskell.com/ - позитивно и понятно изложенный материал, начиная с самых основ (на английском), есть перевод на русский (высылается по запросу)
https://en.wikibooks.org/wiki/Haskell - справочник-руководство (на английском)
https://ruhaskell.org/ - сайт русскоязычного сообщества языка Haskell
https://epogrebnyak.github.io/functional-programming-jargon/ - жаргон (терминология) функционального программирования
https://learnxinyminutes.com/docs/haskell/ - сжатое описание в формате шпаргалки
https://githowto.com/ - интерактивный курс по работе с системой контроля версий