Skip to content

Лабораторные работы по функциональному программированию (ИТМО, ПИиКТ-СиППО, 4 курс).

License

Notifications You must be signed in to change notification settings

Avvessalom/itmo-functional-programming

Repository files navigation

Лабораторная работа №1

Цель: освоить базовые приёмы и абстракции функционального программирования: функции, поток управления и поток данных, сопоставление с образцом, рекурсия, свёртка, отображение, работа с функциями как с данными, списки. В рамках лабораторной работы вам предлагается решить несколько задач проекта Эйлер. Список задач – ваш вариант. Для каждой проблемы должно быть представлено несколько решений:

  • монолитные реализации с использованием:

    • хвостовой рекурсии;
    • рекурсии (вариант с хвостовой рекурсией не является примером рекурсии);
  • модульной реализации, где явно разделена генерация последовательности, фильтрация и свёртка (должны использоваться функции reduce, fold, filter и аналогичные);

  • генерация последовательности при помощи отображения (map);

  • работа со спец. синтаксисом для циклов (где применимо);

  • работа с бесконечными списками для языков поддерживающих ленивые коллекции или итераторы как часть языка (к примеру Haskell, Clojure);

  • реализация на любом удобном для вас традиционном языке программировании для сравнения.

Требуется использовать идиоматичный для технологии стиль программирования.

Лабораторная работа №2

Цель: освоиться с построением пользовательских типов данных, полиморфизмом, рекурсивными алгоритмами и средствами тестирования (unit testing, property-based testing). В рамках лабораторной работы вам предлагается реализовать одну из предложенных классических структур данных (список, дерево, бинарное дерево, hashmap, граф...). Требования:

  1. Функции:

    • добавление и удаление элементов;
    • фильтрация;
    • отображение (map);
    • свертки (левая и правая);
    • структура должна быть моноидом.
  2. Структуры данных должны быть неизменяемыми. Если язык допускает изменение данных – необходимо это протестировать.

  3. Реализованные функции должны быть встроены/совместимы со стандартными интерфейсами/библиотекой.

  4. Библиотека должна быть протестирована в рамках unit testing.

  5. Библиотека должна быть протестирована в рамках property-based тестирования (как минимум 3 свойства).

  6. Структура должна быть полиморфной.

  7. Требуется использовать идиоматичный для технологии стиль программирования.

About

Лабораторные работы по функциональному программированию (ИТМО, ПИиКТ-СиППО, 4 курс).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published