Алгебричний тип даних — в інформатиці найзагальніший складений тип, який являє собою з типів-добутків. Алгебричний тип має набір , кожен з яких приймає на вхід значення певних типів і повертає значення конструйованого типу. Конструктор є функцією, яка будує значення свого типу на основі вхідних значень. Для подальшого видобування цих значень з алгебричного типу використовується зіставлення зі зразком.
Простим прикладом алгебричного типу даних є список. Дійсно, список має два конструктори — конструктор порожнього списку і конструктор пари, першим елементом якої є значення певного типу, а другим — список. Приклад визначення списку мовою Haskell:
data List a = Nil | Cons a (List a)
Так що видно, що алгебричні типи даних є контейнерними типами — вони містять у собі значення інших типів (або того ж самого типу). Те, що в списку перший конструктор не приймає на вхід ніяких параметрів, не повинно викликати сумніву. Така форма конструктора є необхідною для створення значень, які не містять нічого, але є «одиничними» елементами алгебричних типів даних.
Спеціальними різновидами алгебричних типів даних є (вони мають тільки один конструктор) та перерахування (в них всі конструктори аргументів не мають зовсім, хоча самих конструкторів може бути кілька). Так, найпростішим, але дуже поширеним перерахуванням є логічний тип. Код на Haskell:
data Bool = False | True
Також алгебричний тип даних може бути абстрактним, якщо такий тип визначений у деякому модулі, з якого не експортуються конструктори відповідного типу, а доступ до значень всередині алгебричного типу даних здійснюється за допомогою спеціальних методів — . Особливо варто відзначити так звані «узагальнені алгебричні типи даних», реалізовані в мовах Haskell і ML.
Залишається відзначити, що з точки зору даних алгебричним типом даних є розмічене об'єднання декартових добутків типів. Кожний доданок у розміченому об'єднанні відповідає одному конструктору, а кожен конструктор своєю чергою визначає декартів добуток типів, відповідних параметрам конструктора. Конструктори без параметрів є порожніми добутками. Якщо алгебричний тип даних є рекурсивним, всі розмічені об'єднання обгортають рекурсивним типом, і кожен конструктор повертає рекурсивний тип.
Реалізація
Мова Haskell
У мові Haskell будь-який тип даних, який не є примітивним, є алгебричним. Всі можливі види значень (перерахування, об'єкти, структури тощо) будуються за допомогою конструкторів алгебричних типів даних. Тому розглянута тема є надзвичайно важливою для розуміння системи типізації мови Haskell.
Мова Nemerle
У мові Nemerle існує ключове слово «variant», за допомогою якого можна описати алгебричний тип даних. Всі створені таким шляхом варіанти можна зіставити зі зразком через ключове слово «match».
Мова Haxe
У мові Haxe алгебричний тип даних реалізується за допомогою (анонімних типів) і (перерахувань). У мові передбачено , яке так само можна застосувати для роботи з алгебричним типом даних.
Див. також
Посилання
- Algebraic data type / Free On-line Dictionary of Computing (англ.)
- Brent Yorgey, 2: Algebraic Data Types / School of Haskell. Starting with Haskell. Introduction to Haskell(англ.)
- Algebraic data type [Архівовано 3 жовтня 2015 у Wayback Machine.] / Haskell wiki (англ.)
- Роман Душкин, Алгебраические типы данных и их использование в программировании [Архівовано 4 березня 2016 у Wayback Machine.], «Практика функционального программирования» (ISSN 2075-8456) 2009 № 2
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algebrichnij tip danih v informatici najzagalnishij skladenij tip yakij yavlyaye soboyu tip sumu z tipiv dobutkiv Algebrichnij tip maye nabir konstruktoriv kozhen z yakih prijmaye na vhid znachennya pevnih tipiv i povertaye znachennya konstrujovanogo tipu Konstruktor ye funkciyeyu yaka buduye znachennya svogo tipu na osnovi vhidnih znachen Dlya podalshogo vidobuvannya cih znachen z algebrichnogo tipu vikoristovuyetsya zistavlennya zi zrazkom Prostim prikladom algebrichnogo tipu danih ye spisok Dijsno spisok maye dva konstruktori konstruktor porozhnogo spisku i konstruktor pari pershim elementom yakoyi ye znachennya pevnogo tipu a drugim spisok Priklad viznachennya spisku movoyu Haskell data List a Nil Cons a List a Tak sho vidno sho algebrichni tipi danih ye kontejnernimi tipami voni mistyat u sobi znachennya inshih tipiv abo togo zh samogo tipu Te sho v spisku pershij konstruktor ne prijmaye na vhid niyakih parametriv ne povinno viklikati sumnivu Taka forma konstruktora ye neobhidnoyu dlya stvorennya znachen yaki ne mistyat nichogo ale ye odinichnimi elementami algebrichnih tipiv danih Specialnimi riznovidami algebrichnih tipiv danih ye dekartovi tipi voni mayut tilki odin konstruktor ta pererahuvannya v nih vsi konstruktori argumentiv ne mayut zovsim hocha samih konstruktoriv mozhe buti kilka Tak najprostishim ale duzhe poshirenim pererahuvannyam ye logichnij tip Kod na Haskell data Bool False True Takozh algebrichnij tip danih mozhe buti abstraktnim yaksho takij tip viznachenij u deyakomu moduli z yakogo ne eksportuyutsya konstruktori vidpovidnogo tipu a dostup do znachen vseredini algebrichnogo tipu danih zdijsnyuyetsya za dopomogoyu specialnih metodiv selektoriv Osoblivo varto vidznachiti tak zvani uzagalneni algebrichni tipi danih realizovani v movah Haskell i ML Zalishayetsya vidznachiti sho z tochki zoru sintaksichno oriyentovanogo konstruyuvannya danih algebrichnim tipom danih ye rozmichene ob yednannya dekartovih dobutkiv tipiv Kozhnij dodanok u rozmichenomu ob yednanni vidpovidaye odnomu konstruktoru a kozhen konstruktor svoyeyu chergoyu viznachaye dekartiv dobutok tipiv vidpovidnih parametram konstruktora Konstruktori bez parametriv ye porozhnimi dobutkami Yaksho algebrichnij tip danih ye rekursivnim vsi rozmicheni ob yednannya obgortayut rekursivnim tipom i kozhen konstruktor povertaye rekursivnij tip Zmist 1 Realizaciya 1 1 Mova Haskell 1 2 Mova Nemerle 1 3 Mova Haxe 2 Div takozh 3 PosilannyaRealizaciyared Mova Haskellred U movi Haskell bud yakij tip danih yakij ne ye primitivnim ye algebrichnim Vsi mozhlivi vidi znachen pererahuvannya ob yekti strukturi tosho buduyutsya za dopomogoyu konstruktoriv algebrichnih tipiv danih Tomu rozglyanuta tema ye nadzvichajno vazhlivoyu dlya rozuminnya sistemi tipizaciyi movi Haskell Mova Nemerlered U movi Nemerle isnuye klyuchove slovo variant za dopomogoyu yakogo mozhna opisati algebrichnij tip danih Vsi stvoreni takim shlyahom varianti mozhna zistaviti zi zrazkom cherez klyuchove slovo match Mova Haxered U movi Haxe algebrichnij tip danih realizuyetsya za dopomogoyu anonimnih tipiv i pererahuvan U movi peredbacheno zistavlennya iz zrazkom yake tak samo mozhna zastosuvati dlya roboti z algebrichnim tipom danih Div takozhred Konstruktor tipiv Uzagalnenij algebrichnij tip danih Dekartiv dobutok Diz yunktne ob yednannya Tip dobutokPosilannyared Algebraic data type Free On line Dictionary of Computing angl Brent Yorgey 2 Algebraic Data Types School of Haskell Starting with Haskell Introduction to Haskell angl Algebraic data type Arhivovano 3 zhovtnya 2015 u Wayback Machine Haskell wiki angl Roman Dushkin Algebraicheskie tipy dannyh i ih ispolzovanie v programmirovanii Arhivovano 4 bereznya 2016 u Wayback Machine Praktika funkcionalnogo programmirovaniya ISSN 2075 8456 2009 2 Otrimano z https uk wikipedia org w index php title Algebrichnij tip danih amp oldid 37253235