Конструктор данных
В теории типов и функциональных языках программирования конструктор алгебраического типа данных или просто конструктор представляет собой функцию с пустым телом, конструирующую объект алгебраического типа данных. Оптимизирующие компиляторы исполняют эти функции статически, то есть [англ.].
Алгебраические типы данных являются важным элементом языков, типизированных по Хиндли — Милнеру.
Пример
Простейшую структуру 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 представляет собой [англ.].
Конструкторы обладают всеми правами функций (например, конструктор 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 В теле функции listOfWords можно видеть как конструктор Word передаётся в качестве параметра функции map, и та применяет его к каждому элементу списка строк, который она получает вторым параметром. Список строк, в свою очередь, получен токенизацией (в данном случае просто разбиением на слова) строки, которую получила функция listOfWords входным параметром.
Каждое применение конструктора Word к объекту типа «строка» порождает объект типа simple_xml. Эти порождённые объекты затем используются для построения списка (это происходит внутри функции map) — таким образом, результатом функции listOfWords будет список объектов типа simple_xml. Это подтверждается её функциональным типом, который выводит компилятор: «string -> simple_xml list». Соответственно, результат функции может непосредственно использоваться в качестве параметра для другого конструктора данного типа — Tagged — что породит новый объект типа simple_xml:
fun mkXmlFile s = Tagged ( "main", listOfWords s ) Таким образом, XML-документ строится посредством рекурсивной композиции конструкторов алгебраического типа (отсюда и название «рекурсивный тип данных»). Например, такой документ
<main>Here is some text</main> будет представлен в программе такой структурой данных:
Tagged ( "main", [Word "Here", Word "is", Word "some", Word "text"] ) В этой записи перемешивается использование конструкторов двух типов — simple_xml и list. Синтаксис «[ , , ]», конструирующий список, является на самом деле синтаксическим сахаром над цепочкой конструкторов типа list:
Tagged ( "main", Word "Here" :: Word "is" :: Word "some" :: Word "text" :: nil ) Хотя тип list и встроен во все Х-М-типизированные языки, но формально он определяется как [англ.] с нуль-арным конструктором nil и бинарным конструктором cons, который обычно имеет инфиксное символьное имя (два двоеточия в классических диалектах ML или одно в Хаскеле):
datatype 'a list = nil | :: of 'a * 'a list infixr 5 :: См. также
- Алгебраический тип данных
- Конструктор типов
- Род (теория типов)
Литература
- Riccardo Pucella. Notes on Programming Standard ML of New Jersey (англ.) // Last revised January 10, 2001. — Cornell University, 2001.
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Конструктор данных, Что такое Конструктор данных? Что означает Конструктор данных?
Ne sleduet putat s Konstruktor tipov V teorii tipov i funkcionalnyh yazykah programmirovaniya konstruktor algebraicheskogo tipa dannyh ili prosto konstruktor predstavlyaet soboj funkciyu s pustym telom konstruiruyushuyu obekt algebraicheskogo tipa dannyh Optimiziruyushie kompilyatory ispolnyayut eti funkcii staticheski to est angl Algebraicheskie tipy dannyh yavlyayutsya vazhnym elementom yazykov tipizirovannyh po Hindli Milneru PrimerProstejshuyu strukturu XML dokumenta v Standard ML mozhno opredelit sleduyushim obrazom datatype simple xml Empty Word of string Tagged of string simple xml list Eto opredelenie algebraicheskogo tipa dannyh Ono vvodit v programmu chetyre identifikatora nul arnyj konstruktor tipov simple xml i tri konstruktora obektov etogo algebraicheskogo tipa nul arnyj Empty unarnyj Word i binarnyj Tagged Poslednij prinimaet dva parametra v dannom sluchae v vide kortezha vtoroj iz kotoryh imeet tip simple xml list to est spisok obektov opredelyaemogo zdes tipa Takim obrazom simple xml predstavlyaet soboj angl Konstruktory obladayut vsemi pravami funkcij naprimer konstruktor Word imeet funkcionalnyj tip string gt simple xml i v chastnosti mogut ispolzovatsya v abstrakcii funkcij fun listOfWords s map Word String tokens Char isSpace s fun toString e let val scat String concat in case e of Empty gt Word s gt s Tagged tag contents gt scat lt tag gt scat map toString contents lt tag gt end V tele funkcii listOfWords mozhno videt kak konstruktor Word peredayotsya v kachestve parametra funkcii map i ta primenyaet ego k kazhdomu elementu spiska strok kotoryj ona poluchaet vtorym parametrom Spisok strok v svoyu ochered poluchen tokenizaciej v dannom sluchae prosto razbieniem na slova stroki kotoruyu poluchila funkciya listOfWords vhodnym parametrom Kazhdoe primenenie konstruktora Word k obektu tipa stroka porozhdaet obekt tipa simple xml Eti porozhdyonnye obekty zatem ispolzuyutsya dlya postroeniya spiska eto proishodit vnutri funkcii map takim obrazom rezultatom funkcii listOfWords budet spisok obektov tipa simple xml Eto podtverzhdaetsya eyo funkcionalnym tipom kotoryj vyvodit kompilyator string gt simple xml list Sootvetstvenno rezultat funkcii mozhet neposredstvenno ispolzovatsya v kachestve parametra dlya drugogo konstruktora dannogo tipa Tagged chto porodit novyj obekt tipa simple xml fun mkXmlFile s Tagged main listOfWords s Takim obrazom XML dokument stroitsya posredstvom rekursivnoj kompozicii konstruktorov algebraicheskogo tipa otsyuda i nazvanie rekursivnyj tip dannyh Naprimer takoj dokument lt main gt Here is some text lt main gt budet predstavlen v programme takoj strukturoj dannyh Tagged main Word Here Word is Word some Word text V etoj zapisi peremeshivaetsya ispolzovanie konstruktorov dvuh tipov simple xml i list Sintaksis konstruiruyushij spisok yavlyaetsya na samom dele sintaksicheskim saharom nad cepochkoj konstruktorov tipa list Tagged main Word Here Word is Word some Word text nil Hotya tip list i vstroen vo vse H M tipizirovannye yazyki no formalno on opredelyaetsya kak angl s nul arnym konstruktorom nil i binarnym konstruktorom cons kotoryj obychno imeet infiksnoe simvolnoe imya dva dvoetochiya v klassicheskih dialektah ML ili odno v Haskele datatype a list nil of a a list infixr 5 Sm takzheAlgebraicheskij tip dannyh Konstruktor tipov Rod teoriya tipov LiteraturaRiccardo Pucella Notes on Programming Standard ML of New Jersey angl Last revised January 10 2001 Cornell University 2001
