Конструктор (функциональное программирование)

Материал из Поле цифровой дидактики

В теории типов и функциональных языках программирования конструктор алгебраического типа данных или просто конструктор представляет собой функцию с пустым телом, конструирующую объект алгебраического типа данных.

Алгебраические типы данных являются важным элементом языков, типизированных по Хиндли — Милнеру.

Пример

Простейшую структуру XML-документа в Standard ML можно определить следующим образом<

datatype simple_xml = Empty
                    | Word of string
                    | Tagged of string * simple_xml list

Это определение алгебраического типа данных. Оно вводит в программу четыре идентификатора: нуль-арный конструктор типов simple_xml и три конструктора объектов этого алгебраического типа: нуль-арный Empty, унарный Word и бинарный Tagged. Последний принимает два параметра (в данном случае в виде кортежа), второй из которых имеет тип simple_xml list (то есть список объектов определяемого здесь типа). Таким образом, simple_xml представляет собой Шаблон:Iw.

Конструкторы обладают всеми правами функций (например, конструктор Word имеет функциональный тип «string -> simple_xml»), и в частности, могут использоваться в абстракции функций.

fun listOfWords s =
   map Word (String.tokens Char.isSpace s)

fun toString e =
   let val scat = String.concat in
      case e of
         Empty => ""
       | Word s => s ^ " "
       | Tagged (tag, contents) => scat [ "<",tag,">", scat (map toString contents), "</",tag,">" ]
   end