Конструктор (функциональное программирование)В теории типов и функциональных языках программирования конструктор алгебраического типа данных или просто конструктор представляет собой функцию с пустым телом, конструирующую объект алгебраического типа данных. Оптимизирующие компиляторы исполняют эти функции статически, то есть на этапе компиляции[англ.]. Алгебраические типы данных являются важным элементом языков, типизированных по Хиндли — Милнеру. ПримерПростейшую структуру XML-документа в Standard ML можно определить следующим образом: datatype simple_xml = Empty
| Word of string
| Tagged of string * simple_xml list
Это определение алгебраического типа данных. Оно вводит в программу четыре идентификатора: нуль-арный конструктор типов Конструкторы обладают всеми правами функций (например, конструктор 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
В теле функции Каждое применение конструктора fun mkXmlFile s = Tagged ( "main", listOfWords s )
Таким образом, XML-документ строится посредством рекурсивной композиции конструкторов алгебраического типа (отсюда и название «рекурсивный тип данных»). Например, такой документ <main>Here is some text</main>
будет представлен в программе такой структурой данных: Tagged ( "main", [Word "Here", Word "is", Word "some", Word "text"] )
В этой записи перемешивается использование конструкторов двух типов — Tagged ( "main", Word "Here" :: Word "is" :: Word "some" :: Word "text" :: nil )
Хотя тип datatype 'a list = nil | :: of 'a * 'a list
infixr 5 ::
См. такжеЛитература
|
Portal di Ensiklopedia Dunia