Algebraický datový typ je nejobecnějším složeným typem v informatice , což je součet typů produktů . Algebraický typ má sadu konstruktorů , z nichž každý přijímá hodnoty určitých typů jako vstup a vrací hodnotu vytvořeného typu. Konstruktor je funkce , která vytváří hodnotu svého typu na základě vstupních hodnot. Porovnání vzorů se používá k pozdějšímu extrahování těchto hodnot z algebraického typu .
Jednoduchým příkladem algebraického datového typu je seznam . Seznam má totiž dva konstruktory – prázdný seznamový konstruktor a párový konstruktor, jehož prvním prvkem je hodnota určitého typu a druhým je seznam. Příklad definice seznamu v Haskell :
seznam dat a = nula | Nevýhody a ( seznam a )Takže můžete vidět, že algebraické datové typy jsou typy kontejnerů - obsahují v nich hodnoty jiných typů (nebo stejného typu). Skutečnost, že první konstruktor seznamu nebere jako vstup žádné parametry, by neměla být zavádějící. Tato forma konstruktoru je nezbytná k vytvoření hodnot, které v sobě nic neobsahují, ale jsou „jednotlivými“ prvky algebraických datových typů.
Speciálními variantami algebraických datových typů jsou kartézské typy (mají pouze jeden konstruktor) a výčty (nemají vůbec žádné argumentační konstruktory, i když samotných konstruktorů může být několik). Takže nejjednodušší, ale velmi široce používaný výčet je Booleovský typ. Haskell kód :
data bool = nepravda | SkutečnýAlgebraický datový typ může být také abstraktní , pokud je takový typ definován v nějakém modulu, ze kterého nejsou exportovány konstruktory odpovídajícího typu, a přístup k hodnotám uvnitř algebraického datového typu se provádí pomocí speciálních metod - selektorů . Za zmínku stojí zejména takzvané " zobecněné algebraické datové typy ", které jsou implementovány v Haskell a ML .
Zbývá poznamenat, že z hlediska syntakticky orientované konstrukce dat je algebraický datový typ výraznou unií kartézských součinů typů. Každý člen v diskriminovaném sjednocení odpovídá jednomu konstruktoru a každý konstruktor zase definuje kartézský součin typů odpovídajících parametrům konstruktoru. Konstruktory bez parametrů jsou prázdné produkty. Pokud je algebraický datový typ rekurzivní , celé diskriminované sjednocení je zabaleno do rekurzivního typu a každý konstruktor vrátí rekurzivní typ.
V Haskell je každý datový typ, který není primitivní , algebraický. Všechny možné druhy hodnot ( výčty , objekty , struktury atd.) jsou sestaveny pomocí algebraických konstruktorů datových typů. Zvažované téma je proto nesmírně důležité pro pochopení Haskellova systému psaní.
Jazyk Nemerle má klíčové slovo „varianta“, které lze použít k popisu algebraického datového typu. Všechny takto vytvořené varianty lze porovnat pomocí klíčového slova „match“.
V jazyce Haxe je algebraický datový typ implementován pomocí anonymních typů a výčtů . Jazyk poskytuje porovnávání vzorů , které lze také použít pro práci s algebraickým datovým typem.
Typy dat | |
---|---|
Neinterpretovatelné | |
Numerický | |
Text | |
Odkaz | |
Kompozitní | |
abstraktní | |
jiný | |
související témata |