Конструктор типов: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 1:
В [[язык программирования|языках программирования]] и [[теория типов|теории типов]], '''конструктор типа''' представляет собой конструкцию {{iw|[[система типов|типизированного|en|type system}}]] [[формальный язык|формального языка]], которая строит новые типы из старых. Примерами типичных конструкторов типов служат {{iw|тип-произведение|типы-произведения|en|product type}}, {{iw|Функциональный тип|функциональные типы|en|Function type}} и [[Список (информатика)|списки]]. {{iw|Простейшие типы||en|Basic type}} представляются конструкторами типов нулевой [[арность|арности]].
 
== Пример ==
Строка 6:
 
Например, простейшую структуру [[XML]]-документа можно определить следующим образом:
<!-- код на Standard ML, но такой подсветки нет, а подсветка Окамла ужасна -->
<source lang=ocaml>
datatype simple_xml = Empty
Строка 13 ⟶ 12 :
</source>
Это определение вводит в программу четыре идентификатора: [[алгебраический тип данных]] <code>simple_xml</code> и три конструктора типа: один нулевой арности (<code>Empty</code>) и два унарных (<code>Word</code> и <code>Tagged</code>). Последний конструктор принимает один параметр, являющийся [[Запись (тип данных)|записью]], которую составляют два поля, второе из которых имеет тип <code>simple_xml list</code> (т.е. [[Список (информатика)|список]] объектов типа <code>simple_xml</code>). Таким образом, определяемый тип является {{iw|Рекурсивный тип данных|рекурсивным|en|Recursive data type}}.
<!-- код на Standard ML, но такой подсветки нет, а подсветка Окамла ужасна -->
 
Конструкторы типов обладают всеми правами функций (например, конструктор <code>Word</code> имеет тип {{nowrap|<code>string -> simple_xml</code>}}), и в частности, могут использоваться в качестве [[абстракция функций|абстракции функций]].:
<!-- код на Standard ML, но такой подсветки нет, а подсветка Окамла ужасна -->
<source lang=ocaml>
fun listOfWords s =