A típuselméletben és a funkcionális programozási nyelvekben az algebrai adattípus-konstruktor vagy egyszerűen egy konstruktor egy üres testtel rendelkező függvény, amely algebrai adattípusú objektumot hoz létre . Az optimalizáló fordítók ezeket a függvényeket statikusan hajtják végre, azaz fordítási időben .
Az algebrai adattípusok a Hindley-Milner típusú nyelvek fontos elemei .
Az XML -dokumentum legegyszerűbb szerkezete a Standard ML - ben a következőképpen határozható meg:
adattípus simple_xml = Üres | karakterlánc szava | _ A karakterlánc címkézése * simple_xml listaEz egy algebrai adattípus definíciója . Négy azonosítót vezet be a programba: egy nulláris típusú konstruktort és háromsimple_xml ilyen algebrai típusú objektumkonstruktort: nullary , unary és binary . Ez utóbbi két paramétert vesz fel (jelen esetben sorként ), amelyek közül a másodiknak típusa van (vagyis az itt meghatározott típusú objektumok listája ). Így egy rekurzív adattípus . EmptyWordTaggedsimple_xml listsimple_xml
A konstruktorok minden függvényjoggal rendelkeznek (például a konstruktornak " " függvénytípusaWord van ), és különösen a függvényabsztrakcióban használhatók . string -> simple_xml
szórakoztató listOfWords s = térkép Word ( String . tokens Char . isSpace s ) fun toString e = let val scat = String . concat az Empty esetén = > " " | Szó s => s ^ " " | Tagged ( tag , contents ) => scat [ "<" , tag , ">" , scat ( térkép toString contents ), "</" , tag , ">" ] endA függvény törzsében listOfWordsláthatja, hogy a konstruktor hogyan kerül Wordátadásra paraméterként a függvénynek map, és alkalmazza azt a karakterlánclista minden elemére, amelyet második paraméterként kap. A karakterláncok listáját pedig a függvény által listOfWordsbemeneti paraméterként kapott karakterlánc tokenizálásával (jelen esetben egyszerűen szavakra bontásával) kapjuk meg.
A konstruktor minden egyes Word"string" típusú objektumra történő alkalmazása egy típusú objektumot állít elő simple_xml. Ezek az utódobjektumok ezután egy lista felépítésére szolgálnak (ez a ben történik map) - így a függvény eredménye a listOfWordstípusú objektumok listája lesz simple_xml. Ezt megerősíti a függvény típusa , amelyre a fordító következtetstring -> simple_xml list : " ". Ennek megfelelően a függvény eredménye közvetlenül használható paraméterként egy másik ilyen típusú konstruktorhoz - Tagged - amely egy új típusú objektumot hoz létre simple_xml:
fun mkXmlFile s = Tagged ( "fő" , listOfWords s )Így egy XML - dokumentumot rekurzívan összeállított algebrai típusú konstruktorok állítanak össze (innen ered a " rekurzív adattípus " elnevezés). Például egy ilyen dokumentumot
<main> Itt van néhány szöveg </main>a programban a következő adatstruktúra fogja képviselni :
Tagged ( "fő" , [ Szó "Itt" , Word "is" , Word "some" , Word "text" ] )Ebben a bejegyzésben kétféle konstruktor – simple_xmlés list. A [ , , ]listát létrehozó szintaxis valójában szintaktikai cukor típuskonstruktorok láncán keresztül list:
Tagged ( "fő" , Szó "Itt" :: Szó "van" :: Szó "néhány" :: Szó "szöveg" :: nulla )Bár a típus minden XM-típusúlist nyelvbe be van építve , formálisan rekurzív adattípusként definiálva null konstruktorral és bináris konstruktorral , amelynek általában infix szimbolikus neve van (két kettőspont a klasszikus ML dialektusokban vagy egy a Haskellben) . nilcons
adattípus ' a lista = nil | :: of ' a * ' list infixr 5 :: _Adattípusok | |
---|---|
Értelmezhetetlen | |
Numerikus | |
Szöveg | |
Referencia | |
Összetett | |
absztrakt | |
Egyéb | |
Kapcsolódó témák |