Algebraický datový typ

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 26. července 2020; kontroly vyžadují 2 úpravy .

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.

Implementace

Haskell language

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í.

Nemerle language

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“.

Haxe language

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.

Viz také

Odkazy