Раскройте свой внутренний функциональный художник

Функциональное программирование на какое-то время становится все более и более популярным, и модное слово объектный функционал в наши дни в моде (вспомните, например, Java 8 Stream API). Использование функциональной парадигмы при кодировании может быть чрезвычайно сложной задачей, но также полезно с точки зрения удобочитаемости, производительности и предотвращения побочных эффектов, среди других преимуществ.

Haskell - это функциональный язык, который можно изучить, чтобы понять плюсы и минусы функциональных языков:

Haskell - это язык компьютерного программирования. В частности, это полиморфно статически типизированный, ленивый, чисто функциональный язык, сильно отличающийся от большинства других языков программирования. Язык назван в честь Haskell Brooks Curry, работа которого в области математической логики служит основой для функциональных языков. Haskell основан на лямбда-исчислении, поэтому мы используем лямбда в качестве логотипа.

В этом посте я расскажу вам о том, что можно создать для изучения Haskell. Вы напишете небольшую программу для создания HTML-документа с тегом SVG, прямоугольники содержимого которого представляют собой часть полуслучайного искусства Мондриана. результат будет выглядеть примерно так, как на изображении выше, или в другом примере вывода:

Без лишних слов, давайте перейдем к делу.

Настраивать

Во-первых, вам нужно импортировать несколько библиотек, которые будут использоваться для достижения некоторой формы случайности.

Затем определите набор вещей, необходимых для запуска программы. К ним относятся желаемое разрешение изображения, минимально возможный размер любого отдельного квадрата (он же область), вероятность того, что квадрат будет окрашен, и список случайных чисел.

Прежде чем мы перейдем к хорошему, вам нужно будет добавить несколько небольших вспомогательных функций. Они будут немного использованы, чтобы помочь нам с округлением, отливкой и зажимом.

Хороший материал

Пришло время перейти к центральной части этого примера. Основная функция mondrian будет вызываться рекурсивно, чтобы разделить область изображения на более мелкие области и потенциально раскрасить их. Первые два параметра x и y обозначают верхний левый угол обрабатываемой области. Следующие два параметра w и h - это ширина и высота рассматриваемой области. Последний параметр - это список случайных чисел с плавающей запятой. Он должен иметь как минимум 3 значения: m и n - это точка, в которой квадрат будет разделен на 4 меньших квадрата. Остальные значения в списке используются в рекурсивных вызовах и возвращаются этой функцией. Обратите внимание, что генерируется 20000 случайных чисел с плавающей запятой, чего должно быть достаточно. Обычно программа прекращает работу по другим причинам. После некоторой проверки ввода определяется, разделены ли регионы и каким образом.

Цвета

Затем вам нужно добавить несколько цветов, иначе ваше изображение будет выглядеть немного блеклым (но если это вам нравится, дерзайте). Как только все подразделения будут завершены в mondrian, некоторые из этих подобластей будут залиты цветом. Окрашивание происходит в функции region. Для создания определенного размера и цветового контраста области в этом примере никогда не окрашиваются, если они идеально квадратные. Эта функция также принимает кучу аргументов: x и y снова определяют верхний левый угол области, а w и h снова представляют ширину и высоту области. Последний параметр - это, опять же, список случайных значений (тот самый), и он должен содержать не менее 4 значений. На практике действительно нужны только два значения (одно для вероятности цвета, другое для основного цвета), но четыре значения необходимы для более сложных цветов. Как вы хотите решать, когда область разделена, окрашена ли она и какой цвет использовать, полностью зависит от вас. В этом примере есть некоторые закомментированные части, которые вы можете использовать в качестве ссылки для изменения выходных данных данного примера. После выбора цвета функция добавляет строку в выходной HTML-файл со встроенным прямоугольником SVG.

Главный

И последнее, но не менее важное: вам нужно будет добавить main метод для запуска вашей программы Haskell. Это устанавливает исходную структуру HTML и завершает HTML-теги при mondrian возврате.

Заключение

Это был краткий пример того, как можно написать небольшую функциональную программу на Haskell для генерации изображений Mondrian в форме HTML-документов. Он иллюстрирует многие возможности Haskell, а также преимущества и проблемы самого функционального программирования.