Тип-добуток (також Π-тип, добуток типів; англ. product type) — конструкція у мовах програмування й інтуїціоністській теорії типів, тип даних, побудований як декартів добуток початкових типів; іншими словами — кортеж типів, чи «кортеж як тип»[⇨]. Використані типи і порядок їх слідування визначають сигнатуру типу-добутку; порядок проходження об'єктів у створюваному кортежі зберігається протягом його часу життя відповідно до заданої сигнатури.
Наприклад, якщо типи A
і B
є множинами значень a
і b
відповідно, то складений з них декартів добуток записується як A
×B
, і отриманий тип-добуток являє собою множину можливих пар (a,b)
.
Теоретичне і прикладне значення
У мовах, що використовують виклик за значенням, тип-добуток може інтерпретуватися як добуток у категорії типів. У відповідності Каррі-Говарда типи-добутки відповідають кон'юнкції в логіці (операції AND
).
Частковий випадок добутку двох типів часто називають «парою» або точніше «впорядкованою парою». Добуток довільної скінченної кількості типів називається «n-арним типом-добутком» або «кортежем з n типів». В українськомовній літературі також є варіант найменування «упорядкована n-ка» (узагальнення від «двійка», «трійка» і т. д.), лінгвістично побудований за аналогією з англійським терміном «tuple» (див. кортеж).
Вироджена форма типу-добутку — добуток нуля типів — являє собою [en] (англ. unit type, «тип юніт»), тобто тип, представлений єдиним значенням. Системи типів деяких мов (наприклад, Python) можуть передбачати один або кілька унікальних одиничних типів, не сумісних з типом кортежу з нуля елементів.
Типи-добутки вбудовано в більшість функційних мов програмування. Наприклад, добуток type1× … × typen записується як type1 *
… *
typen в ML або як (
type1,
…,
typen)
у Haskell. В обох мовах кортежі записуються як (
v1,
…,
vn)
і їх компоненти добуваються шляхом зіставлення зі зразком. На додачу до цього більшість функційних мов надає алгебричні типи даних, що розширюють поняття як типу-добутку, так і . Алгебричні типи, задані єдиним , ізоморфні типам-добуткам.
Кортеж типів як чисте втілення типу-добутку служить формальним обґрунтуванням для частіше вживаного у мовах складеного типу «запис»[⇨], хоча в деяких мовах реалізовано обидва контейнери. Різниця зазвичай полягає в тому, що кортежі задають і зберігають порядок проходження своїх компонентів у пам'яті ЕОМ (це важливо при зверненні до їх компонентів за допомогою адресної арифметики), але не надають можливості доступу до них за допомогою кваліфікованих ідентифікаторів, а записи, навпаки, визначають ідентифікатори, але не визначають порядок. Проте, є винятки:
- у мові Standard ML кортежі значень з метою оптимізації розміщення в пам'яті реалізуються за допомогою записів, у яких як ідентифікатори компонентів використовуються їхні порядкові номери в кортежі; адресна арифметика недоступна; типи перестають існувати після компіляції; і необхідний порядок слідування є примусовим тільки за [en].
- у мові C тип даних «структура» (
struct
)[⇨] поєднує властивості записів і кортежів, тобто дозволяє призначати компонентам ідентифікатори і одночасно гарантує збереження порядку їх слідування. Крім того, на відміну від записів і кортежів, структури Сі можуть містити вказівники на власні об'єкти, що дозволяє безпосередньо будувати рекурсивні типи даних.
Реалізація в мовах програмування
Кортежі
Записи
В багатьох мовах запис являє собою , який інкапсулює без набір значень різних типів.
В одних мовах (наприклад, в Сі або Паскалі) порядок розміщення значень у пам'яті задається під час визначення типу і зберігається протягом часу життя об'єктів, що дає можливість непрямого доступу (наприклад, через вказівники); в інших мовах (наприклад, в ML) порядок розміщення не визначений, так що доступ до даних можливий тільки за кваліфікованим ідентифікатором. У деяких мовах, хоча порядок проходження і зберігається, але вирівнювання контролює компілятор, так що використання адресної арифметики може виявитися платформно-залежним. Деякі мови дозволяють присвоювання між екземплярами різних записів, нехтуючи відмінності в ідентифікаторах компонентів записів, і ґрунтуючись тільки на порядку слідування. Інші мови, навпаки, враховують тільки збіг назв, дозволяючи відмінності в порядку їх визначення.
Вперше записи представлено в мові Кобол, де вони мали досить складну нотацію. Під час перевірки узгодження типів, Кобол враховує тільки збіг назв полів записів і не враховує порядку їх слідування.
Кортежі служать формальним обґрунтуванням записів у теорії типів. Разом з тим, у мовах кортежі часом можуть реалізовуватися за допомогою записів, що використовують як ідентифікатори індексні номери полів в одержуваному кортежі.
Структури в Сі
В мові Сі, структура (struct
) — , який інкапсулює без набір значень різних типів. Порядок розміщення значень у пам'яті задається під час визначення типу і зберігається протягом часу життя об'єктів, що дає можливість непрямого доступу (наприклад, через вказівники).
Примітки
- М.О.Денисьєвський та інші (2005). (PDF) (укр.) . Київ: Видавничо-поліграфічний центр "Київський університет". с. 9. Архів оригіналу (PDF) за 15 лютого 2020. Процитовано 17 листопада 2020.
{{}}
: Вказано більш, ніж один|pages=
та|page=
()
Посилання
- Homotopy Type Theory: Univalent Foundations of Mathematics, section 1.5. — The Univalent Foundations Program, Institute for Advanced Study. з джерела 30 жовтня 2020. Процитовано 17 листопада 2020.
- [en]. Введение в Стандартный ML. — Carnegie Mellon University, 1986. — 97 с. — ISBN PA 15213-3891.
- Эммануэль Шалуа, Паскаль Манури, Бруно Пагано. Разработка программ с помощью Objective Caml. — 2007.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Tip dobutok takozh P tip dobutok tipiv angl product type konstrukciya u movah programuvannya j intuyicionistskij teoriyi tipiv tip danih pobudovanij yak dekartiv dobutok pochatkovih tipiv inshimi slovami kortezh tipiv chi kortezh yak tip Vikoristani tipi i poryadok yih sliduvannya viznachayut signaturu tipu dobutku poryadok prohodzhennya ob yektiv u stvoryuvanomu kortezhi zberigayetsya protyagom jogo chasu zhittya vidpovidno do zadanoyi signaturi Napriklad yaksho tipi i A i i i B i ye mnozhinami znachen i a i i i b i vidpovidno to skladenij z nih dekartiv dobutok zapisuyetsya yak i A i i B i i otrimanij tip dobutok yavlyaye soboyu mnozhinu mozhlivih par i a i i b i Teoretichne i prikladne znachennyaU movah sho vikoristovuyut viklik za znachennyam tip dobutok mozhe interpretuvatisya yak dobutok u kategoriyi tipiv U vidpovidnosti Karri Govarda tipi dobutki vidpovidayut kon yunkciyi v logici operaciyi AND Chastkovij vipadok dobutku dvoh tipiv chasto nazivayut paroyu abo tochnishe vporyadkovanoyu paroyu Dobutok dovilnoyi skinchennoyi kilkosti tipiv nazivayetsya n arnim tipom dobutkom abo kortezhem z n tipiv V ukrayinskomovnij literaturi takozh ye variant najmenuvannya uporyadkovana n ka uzagalnennya vid dvijka trijka i t d lingvistichno pobudovanij za analogiyeyu z anglijskim terminom tuple div kortezh Virodzhena forma tipu dobutku dobutok nulya tipiv yavlyaye soboyu en angl unit type tip yunit tobto tip predstavlenij yedinim znachennyam Sistemi tipiv deyakih mov napriklad Python mozhut peredbachati odin abo kilka unikalnih odinichnih tipiv ne sumisnih z tipom kortezhu z nulya elementiv Tipi dobutki vbudovano v bilshist funkcijnih mov programuvannya Napriklad dobutok type1 typen zapisuyetsya yak type1 typen v ML abo yak type1 typen u Haskell V oboh movah kortezhi zapisuyutsya yak v1 vn i yih komponenti dobuvayutsya shlyahom zistavlennya zi zrazkom Na dodachu do cogo bilshist funkcijnih mov nadaye algebrichni tipi danih sho rozshiryuyut ponyattya yak tipu dobutku tak i Algebrichni tipi zadani yedinim izomorfni tipam dobutkam Kortezh tipiv yak chiste vtilennya tipu dobutku sluzhit formalnim obgruntuvannyam dlya chastishe vzhivanogo u movah skladenogo tipu zapis hocha v deyakih movah realizovano obidva kontejneri Riznicya zazvichaj polyagaye v tomu sho kortezhi zadayut i zberigayut poryadok prohodzhennya svoyih komponentiv u pam yati EOM ce vazhlivo pri zvernenni do yih komponentiv za dopomogoyu adresnoyi arifmetiki ale ne nadayut mozhlivosti dostupu do nih za dopomogoyu kvalifikovanih identifikatoriv a zapisi navpaki viznachayut identifikatori ale ne viznachayut poryadok Prote ye vinyatki u movi Standard ML kortezhi znachen z metoyu optimizaciyi rozmishennya v pam yati realizuyutsya za dopomogoyu zapisiv u yakih yak identifikatori komponentiv vikoristovuyutsya yihni poryadkovi nomeri v kortezhi adresna arifmetika nedostupna tipi perestayut isnuvati pislya kompilyaciyi i neobhidnij poryadok sliduvannya ye primusovim tilki za en u movi C tip danih struktura struct poyednuye vlastivosti zapisiv i kortezhiv tobto dozvolyaye priznachati komponentam identifikatori i odnochasno garantuye zberezhennya poryadku yih sliduvannya Krim togo na vidminu vid zapisiv i kortezhiv strukturi Si mozhut mistiti vkazivniki na vlasni ob yekti sho dozvolyaye bezposeredno buduvati rekursivni tipi danih Realizaciya v movah programuvannyaKortezhi Zapisi V bagatoh movah zapis yavlyaye soboyu yakij inkapsulyuye bez nabir znachen riznih tipiv V odnih movah napriklad v Si abo Paskali poryadok rozmishennya znachen u pam yati zadayetsya pid chas viznachennya tipu i zberigayetsya protyagom chasu zhittya ob yektiv sho daye mozhlivist nepryamogo dostupu napriklad cherez vkazivniki v inshih movah napriklad v ML poryadok rozmishennya ne viznachenij tak sho dostup do danih mozhlivij tilki za kvalifikovanim identifikatorom U deyakih movah hocha poryadok prohodzhennya i zberigayetsya ale virivnyuvannya kontrolyuye kompilyator tak sho vikoristannya adresnoyi arifmetiki mozhe viyavitisya platformno zalezhnim Deyaki movi dozvolyayut prisvoyuvannya mizh ekzemplyarami riznih zapisiv nehtuyuchi vidminnosti v identifikatorah komponentiv zapisiv i gruntuyuchis tilki na poryadku sliduvannya Inshi movi navpaki vrahovuyut tilki zbig nazv dozvolyayuchi vidminnosti v poryadku yih viznachennya Vpershe zapisi predstavleno v movi Kobol de voni mali dosit skladnu notaciyu Pid chas perevirki uzgodzhennya tipiv Kobol vrahovuye tilki zbig nazv poliv zapisiv i ne vrahovuye poryadku yih sliduvannya Kortezhi sluzhat formalnim obgruntuvannyam zapisiv u teoriyi tipiv Razom z tim u movah kortezhi chasom mozhut realizovuvatisya za dopomogoyu zapisiv sho vikoristovuyut yak identifikatori indeksni nomeri poliv v oderzhuvanomu kortezhi Strukturi v Si V movi Si struktura struct yakij inkapsulyuye bez nabir znachen riznih tipiv Poryadok rozmishennya znachen u pam yati zadayetsya pid chas viznachennya tipu i zberigayetsya protyagom chasu zhittya ob yektiv sho daye mozhlivist nepryamogo dostupu napriklad cherez vkazivniki PrimitkiM O Denisyevskij ta inshi 2005 PDF ukr Kiyiv Vidavnicho poligrafichnij centr Kiyivskij universitet s 9 Arhiv originalu PDF za 15 lyutogo 2020 Procitovano 17 listopada 2020 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite book title Shablon Cite book cite book a Vkazano bilsh nizh odin pages ta page dovidka PosilannyaHomotopy Type Theory Univalent Foundations of Mathematics section 1 5 The Univalent Foundations Program Institute for Advanced Study z dzherela 30 zhovtnya 2020 Procitovano 17 listopada 2020 en Vvedenie v Standartnyj ML Carnegie Mellon University 1986 97 s ISBN PA 15213 3891 Emmanuel Shalua Paskal Manuri Bruno Pagano Razrabotka programm s pomoshyu Objective Caml 2007