Введение

Тип данных, который ссылается на себя в своем определении.

В языках программирования рекурсивный тип данных (также известный как рекурсивно определенный, индуктивно определенный или индуктивный тип данных) — это тип данных для значений, которые могут содержать другие значения того же типа. Данные рекурсивных типов обычно представляются в виде ориентированных графов. Важным применением рекурсии в информатике является определение динамических структур данных, таких как списки и деревья. Рекурсивные структуры данных могут динамически увеличиваться до произвольного размера в ответ на требования времени выполнения, в отличие от статических массивов, размер которых должен быть задан во время компиляции. Иногда термин "индуктивный тип данных" используется для алгебраических типов данных, которые не обязательно являются рекурсивными.

Изорекурсивные типы

При изорекурсивных типах рекурсивный тип и его разворачивание (или раскрутка) (где обозначение указывает, что все экземпляры Z заменяются на Y в X) являются различными (и непересекающимися) типами со специальными конструкциями термов, обычно называемыми сверткой и разворачиванием, которые образуют изоморфизм между ними. Точнее: и , и эти две функции являются обратными друг другу.

Типы с равнорекурсивным действием

Согласно правилам эквирекурсивности, рекурсивный тип и его развертка считаются равными – то есть, эти два выражения типов понимаются как обозначающие один и тот же тип. Фактически, большинство теорий эквирекурсивных типов идут еще дальше и, по сути, утверждают, что любые два выражения типов с одинаковым "бесконечным разложением" эквивалентны. В результате этих правил, эквирекурсивные типы вносят значительно большую сложность в систему типов, чем изорекурсивные типы. Алгоритмические задачи, такие как проверка типов и вывод типов, также более сложны для эквирекурсивных типов. Поскольку прямое сравнение не имеет смысла для эквирекурсивных типов, их можно преобразовать в каноническую форму за время O(n log n), которую легко сравнивать. Изорекурсивные типы отражают структуру самореференциальных (или взаимно референциальных) определений типов, встречающихся в номинальных объектно-ориентированных языках программирования, а также возникают в теоретической семантике типов объектов и классов. В функциональных языках программирования изорекурсивные типы (в виде типов данных) также широко используются.