Упражнения

Для начала просто попрограммируем на Haskell.

  1. Реализуйте функцию, которая вычисляет стрелку Пирса для двух булевых аргументов.

  2. Реализуйте функцию которая сворачивает список используя стрелку Пирса.

    1. Реализуйте вариант с использованием стандартных функций работы с списками.

    2. Реализуйте функцию "руками" (не используя стандартные функции работы со списками).

    3. Реализуйте тесты с помощью hedgehog.

  3. Реализуйте функцию, которая вычисляет сложение двух бит (булов) с переносом.

  4. Используя предыдущую функцию, реализуйте функцию, которая складывает два k-битных числа. Предположим, что числа — просто списки булов.

  5. Реализуйте сами функцию, аналогичную функции pairwise.

  6. Реализуйте сами функцию, аналогичную функции windowed.

  7. Предположим, что изображение — это список байт и информация о размере. Ядро выглядит так же. Реализуйте функцию свёртки.

  8. А теперь попробуем поработать с реальными изображениями с помощью вот этой библиотеки. Необходимо загрузить изображение (с помощью библиотеки), применить к нему свёртку (самостоятельно), сохранить изображение (с помощью библиотеки). Заодно познакомимся с IO.

    1. Сделайте так, чтобы можно было применять несколько свёрток последовательно.

    2. Определите собственные типы для ядра, изображения.

    3. Реализуйте тесты с помощью hedgehog. В качестве эталона можно использовать свёртку из hip.