rea: Библиотека для декларативного описания стратегических игр

После прочтения довольно любопытной исследовательской работы “Resource Entity Action: A Generalized Design Pattern for RTS games” я решил реализовать предложенную концепцию (в несколько упрощённом виде) на Haskell. Ниже пойдёт речь об идее подхода Resource-Entity-Action к проектированию RTS-игр (Command & Conquer, Age of Empires, StarCraft, …) и прочих симуляций, а также о том, как использовать библиотеку rea. Подход Resource-Entity-Action Предложенная в статье выше идея довольно проста по своей сути: для описания логики некоторой RTS-игры мы используем трансферы абстрактных ресурсов между сущностями.
ЧТАТ ПОЛН →

Почему конструкция if-then-else малополезна в языках программирования

Введение: if-then-else В большинстве языков программирования имеется условная конструкция IF ... THEN ... ELSE .... Она знакома любому школьнику и представляет собой развилку на пути из некоторого абстрактного типа a в тип b. Решение о том, взять первый путь или второй, принимается с помощью предиката, то есть путя из a в булев тип (истина/ложь). Вместе с обоими вариантами b (т.н. ветками условия), предикат также идёт параметром к конструкции IF ... THEN .
ЧТАТ ПОЛН →

Простая интуиция линз, призм, изоморфизмов (lens)

Введение В данной заметке я вкратце и упрощённо поделюсь своим пониманием общей картины (“Big Picture”) библиотеки lens и вытекающей из него интуиции о линзах. Интуиция основных операций с линзовыми объектами Итак, имея линзовый объект (о них - позже), мы можем осуществлять с его помощью четыре фундаментальных действия: Смотреть на фокус линзы, то есть фокусироваться внутрь структуры данных: view Модифицировать данные в фокусе линзы, оставляя остальную структуру без изменений: over Полностью замещать данные в фокусе линзы (может быть, на другой тип), оставляя остальную структуру без изменений: set Комбинировать линзовые объекты друг с другом, производя новый линзовый объект: (.
ЧТАТ ПОЛН →

Функторы как адаптеры между категориями

Функторы в теории категорий Как известно, функтор в теории категорий определён как морфизм между двумя категориями (маппинг всех объектов одной категории в объекты другой, маппинг всех морфизмов одной категории в морфизмы другой), который сохраняет нейтральные элементы (Identity) и композицию в соответствующих категориях. Функтор, таким образом, – более общий случай понятия гомоморфизма (групп, моноидов и т.п.), то есть отображения, сохраняющего (алгебраическую) структуру. Функторы в философии В отличии от Множества, которое по своей природе лишено всякой структуры, любая Категория – это сама структура в чистом виде (и ничего кроме структуры).
ЧТАТ ПОЛН →