Tyyppiteoriassa ja funktionaalisissa ohjelmointikielissä algebrallinen tietotyyppikonstruktori tai yksinkertaisesti konstruktori on funktio, jossa on tyhjä runko ja joka rakentaa algebrallisen tietotyypin objektin . Optimointikääntäjät suorittavat nämä toiminnot staattisesti eli käännöshetkellä .
Algebralliset tietotyypit ovat tärkeä osa Hindley-Milner- tyyppisiä kieliä .
Standardi-ML :n XML - dokumentin yksinkertaisin rakenne voidaan määritellä seuraavasti:
tietotyyppi simple_xml = Tyhjä | merkkijonon sana | _ Merkitty merkkijonosta * simple_xml -lista _Tämä on algebrallisen tietotyypin määritelmä . Se tuo ohjelmaan neljä tunnistetta: nollatyyppisen konstruktorin jasimple_xml kolme tämän algebratyypin objektikonstruktoria: nullary , unary ja binary . Jälkimmäinen ottaa kaksi parametria (tässä tapauksessa monikko ), joista toisella on tyyppi (eli luettelo tässä määritellyn tyyppisistä objekteista). On siis rekursiivinen tietotyyppi . EmptyWordTaggedsimple_xml listsimple_xml
Konstruktoreilla on kaikki funktioiden oikeudet (esimerkiksi konstruktorilla Wordon funktiotyyppi " string -> simple_xml"), ja erityisesti niitä voidaan käyttää funktion abstraktiossa .
hauska listaOfWords s = kartta Word ( String . tokens Char . isSpace s ) fun toString e = anna val scat = String . concat tapauksessa e Tyhjä = > " " | Sana s => s ^ " " | Tagged ( tag , contents ) => scat [ "<" , tag , ">" , scat ( map toString contents ), "</" , tag , ">" ] endFunktion rungosta listOfWordsnäet kuinka konstruktori Wordvälitetään parametrina funktiolle mapja se soveltaa sitä jokaiseen merkkijonoluettelon elementtiin, jonka se vastaanottaa toisena parametrina. Merkkijonoluettelo puolestaan saadaan tokenisoimalla (tässä tapauksessa yksinkertaisesti jakamalla sanoiksi) merkkijono, jonka funktio vastaanotti listOfWordssyöteparametrina.
Jokainen konstruktorin sovellus Word"merkkijono"-tyypin objektiin tuottaa objektin, jonka tyyppi on simple_xml. Näitä lapsiobjekteja käytetään sitten luettelon muodostamiseen (tämä tapahtuu :n sisällä map) - joten funktion tuloksena listOfWordson luettelo objekteista, joiden tyyppi on simple_xml. Tämän vahvistaa sen funktiotyyppi , jonka kääntäjä päätteleestring -> simple_xml list : " ". Vastaavasti funktion tulosta voidaan käyttää suoraan parametrina toiselle tämän tyyppiselle konstruktorille - Tagged - joka luo uuden tyypin objektin simple_xml:
fun mkXmlFile s = Tagged ( "main" , listOfWords s )Siten XML - dokumentti muodostetaan rekursiivisesti muodostavilla algebrallisen tyyppisillä konstruktoreilla (siis nimi " rekursiivinen tietotyyppi "). Esimerkiksi tällainen asiakirja
<main> Tässä on tekstiä </main>esitetään ohjelmassa seuraavalla tietorakenteella :
Tagged ( "pää" , [ Sana "Tässä" , Sana "on" , Sana "joku" , Sana "teksti" ] )Tässä artikkelissa yhdistetään kahdentyyppisten konstruktorien käyttö - simple_xmlja list. Listan muodostava " " syntaksi [ , , ]on itse asiassa syntaktinen sokeri tyypin konstruktoriketjun yli list:
Tagged ( "pää" , Sana "Täällä" :: Sana "on" :: Sana "joku" :: Sana "teksti" :: nolla )Vaikka tyyppi liston sisäänrakennettu kaikkiin XM-kirjoitettuihin kieliin, se määritellään muodollisesti rekursiiviseksi tietotyypiksi, on nollakonstruktori nilja binäärikonstruktori cons, jolla on yleensä infix-symbolinen nimi (kaksi kaksoispistettä klassisissa ML -murteissa tai yksi Haskellissa) .
tietotyyppi ' a list = nolla | :: ' a * ' listan liitetiedosto 5 :: _ _Tietotyypit | |
---|---|
Käsittämätön | |
Numeerinen | |
Teksti | |
Viite | |
Komposiitti | |
abstrakti | |
Muut | |
liittyvät aiheet |