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

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м →‎Пример: викификация
Строка 11:
| Tagged of { tag: string, contents: simple_xml list }
</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}}.
 
Конструкторы типов обладают всеми правами функций (например, конструктор <code>Word</code> имеет {{iw|функциональный тип||en|Function type}} {{nowrap|<code>string -> simple_xml</code>}}), и в частности, могут использоваться в качестве [[абстракция функций|абстракции функций]]:
<source lang=ocaml>
fun listOfWords s =