Параметричний поліморфізм

У мовах програмування та теорії типів параметричний поліморфізм дозволяє одному й тому ж коду отримувати "загальний" тип із використанням змінних замість конкретних типів, які можуть бути підставлені за потреби.[1]:340 Параметрично поліморфні функції та типи даних іноді називають відповідно узагальненими функціями та узагальненими типами даних. Вони є основою узагальненого програмування.

Параметричний поліморфізм може бути протиставлений ad hoc поліморфізму. Параметрично поліморфні визначення є універсальними: вони поводяться однаково незалежно від того, для якого типу вони інстанційовані.[1]:340[2]:37 На відміну від цього, визначення ad hoc поліморфізму створюються окремо для кожного типу. Таким чином, ad hoc поліморфізм зазвичай підтримує лише обмежену кількість таких окремих типів, оскільки для кожного типу потрібна окрема реалізація.

Основне визначення

Можна писати функції, які не залежать від типів своїх аргументів. Наприклад, тотожна функція просто повертає свій аргумент без змін. Це природно породжує сімейство можливих типів, таких як , , тощо. Параметричний поліморфізм дозволяє задати для єдиний, найзагальніший тип, вводячи універсально квантифіковану змінну типу:

Параметрично поліморфне визначення потім може бути інстанційоване шляхом підстановки будь-якого конкретного типу замість , що утворює повне сімейство можливих типів.[3]

Тотожна функція є надзвичайним прикладом, але багато інших функцій також виграють від параметричного поліморфізму. Наприклад, функція , яка з’єднує два списки, не аналізує елементи списку, а працює лише зі структурою самого списку. Тому може мати подібну сім'ю типів, таких як , тощо, де позначає список елементів типу . Найзагальніший тип, таким чином, виглядає так:

Цей тип може бути інстанційований для будь-якого типу з сім'ї.

Параметрично поліморфні функції, такі як і , кажуть, що вони параметризовані довільним типом .[4] Обидві функції і параметризовані одним типом, але функції можуть бути параметризовані довільною кількістю типів. Наприклад, функції і , які повертають перший і другий елементи пари, відповідно, можуть мати такі типи:

У виразі тип інстанційований як , а — як у виклику . Тому тип усього виразу є .

Синтаксис, який використовується для введення параметричного поліморфізму, значно відрізняється між мовами програмування. Наприклад, у деяких мовах програмування, таких як Haskell, квантор є неявним і може бути опущеним.[5] Інші мови вимагають явно визначати типи в деяких або всіх точках виклику параметрично поліморфної функції.

Історія

Параметричний поліморфізм вперше був введений у мови програмування в ML у 1975 році.[6] Сьогодні він існує у Standard ML, OCaml, F#, Ada, Haskell, Mercury, Visual Prolog, Scala, Julia, Python, TypeScript, C++ та інших. Java, C#, Visual Basic .NET та Delphi також додали підтримку "дженериків" для параметричного поліморфізму. Деякі реалізації типового поліморфізму зовнішньо схожі на параметричний поліморфізм, але також включають елементи ад-хок. Наприклад, C++ підтримує спеціалізацію шаблонів.

Предикативність, імпредикативність і поліморфізм вищого рангу

Поліморфізм 1-го рангу (предикативний)

У предикативній типізованій системі (також відомій як пренексний поліморфізм), змінні типів не можуть бути замінені на поліморфні типи.[1]: Предикативні теорії типів включають теорію типів Мартіна-Льофа та Nuprl. Це дуже схоже на так званий "ML-стиль" або "Let-поліморфізм" (технічно Let-поліморфізм у ML має кілька інших синтаксичних обмежень). Це обмеження робить розрізнення між поліморфними і неполіморфними типами дуже важливим; таким чином, у предикативних системах поліморфні типи іноді називають схемами типів, щоб відрізняти їх від звичайних (монополіморфних) типів, які іноді називають монотипами.

Наслідком предикативності є те, що всі типи можуть бути записані у формі, яка розміщує всі квантори на зовнішній (пренексній) позиції. Наприклад, розглянемо функцію , описану вище, яка має наступний тип:

Щоб застосувати цю функцію до пари списків, необхідно підставити конкретний тип замість змінної так, щоб отриманий тип функції відповідав типам аргументів.

В імпредикативній системі може бути будь-яким типом, включаючи тип, який сам є поліморфним; таким чином, можна застосовувати до пар списків із елементами будь-якого типу — навіть до списків поліморфних функцій, таких як сама . Поліморфізм у мові ML є предикативним.[джерело?] Це тому, що предикативність разом з іншими обмеженнями робить систему типів настільки простою, що повне виведення типів завжди можливе.

Як практичний приклад, OCaml (нащадок або діалект ML) виконує виведення типів і підтримує імпредикативний поліморфізм, але в деяких випадках, коли використовується імпредикативний поліморфізм, система виведення типів є неповною, якщо програміст не надає явні анотації типів.

Поліморфізм вищого рангу

Деякі системи типів підтримують імпредикативний конструктор функційного типу, навіть якщо інші конструктори типів залишаються предикативними. Наприклад, тип дозволений у системі, яка підтримує поліморфізм вищого рангу, навіть якщо тип може бути недоступним.[7]

Тип вважається типом рангу k (для деякого цілого числа k), якщо жоден шлях від його кореня до квантора не проходить зліва від k або більше стрілок, якщо тип зображений як дерево.[1]:359 Система типів підтримує поліморфізм рангу k, якщо вона дозволяє типи з рангом, що не перевищує k. Наприклад, система типів, яка підтримує поліморфізм рангу 2, дозволяє тип , але не . Система типів, яка допускає типи будь-якого рангу, називається "ранг-n поліморфною".

Вивід типів для поліморфізму рангу 2 є вирішуваним, але для рангів 3 і вище — ні.[8][1]:359

Імпредикативний поліморфізм

Імпредикативний поліморфізм (також відомий як поліморфізм першого класу) є найпотужнішою формою параметричного поліморфізму.[1]:340 У формальній логіці визначення називається імпредикативним, якщо воно є самореференційним; у теорії типів це стосується можливості, щоб тип знаходився в області дії квантора, який його містить. Це дозволяє підстановку будь-якої змінної типу будь-яким типом, включно з поліморфними типами. Прикладом системи, яка підтримує повну імпредикативність, є System F, що дозволяє підстановку для будь-якого типу, включно із самим собою.

У теорії типів найчастіше досліджуваними імпредикативними типізованими λ-численнями є ті, що базуються на лямбда-куб, особливо System F.

Обмежений параметричний поліморфізм

У 1985 році Лука Карделлі та Пітер Вегнер визнали переваги дозволу обмежень на параметри типу.[9] Багато операцій вимагають певних знань про типи даних, але можуть працювати параметрично. Наприклад, щоб перевірити, чи міститься елемент у списку, потрібно порівняти елементи на рівність. У Standard ML параметри типу форми ’’a обмежені так, щоб операція рівності була доступною; відповідно, функція має тип ’’a × ’’a list → bool, і ’’a може бути лише типом із визначеною рівністю. У Haskell обмеження досягається за допомогою вимоги, щоб типи належали до певного типового класу; отже, та сама функція має тип у Haskell. У більшості об'єктно-орієнтованих мов програмування, які підтримують параметричний поліморфізм, параметри можуть бути обмежені підтипами певного типу (див. статті Підтиповий поліморфізм і Узагальнене програмування).

Примітки

  1. а б в г д е Бенджамін К. Пірс (2002). Types and Programming Languages. MIT Press. ISBN 978-0-262-16209-8.
  2. Strachey, Christopher (1967), Fundamental Concepts in Programming Languages (Lecture notes), Copenhagen: International Summer School in Computer Programming. Перевидано у: Strachey, Christopher (1 квітня 2000). Fundamental Concepts in Programming Languages. Higher-Order and Symbolic Computation (англ.). 13 (1): 11—49. doi:10.1023/A:1010000313106. ISSN 1573-0557. S2CID 14124601.
  3. Yorgey, Brent. More polymorphism and type classes. www.seas.upenn.edu. Процитовано 1 жовтня 2022.
  4. Wu, Brandon. Parametric Polymorphism - SML Help. smlhelp.github.io. Процитовано 1 жовтня 2022.
  5. Haskell 2010 Language Report § 4.1.2 Syntax of Types. www.haskell.org. Процитовано 1 жовтня 2022. З одним винятком (спеціальний змінний тип у декларації класу (розділ 4.3.1)), змінні типу в Haskell завжди вважаються універсально квантифікованими; синтаксис для універсальної квантифікації відсутній.
  6. Мілнер, Р., Морріс, Л., Ньюї, М. "Логіка для обчислюваних функцій з рефлексивними та поліморфними типами", Proc. Conference on Proving and Improving Programs, Arc-et-Senans (1975)
  7. Kwang Yul Seo. Kwang's Haskell Blog - Higher rank polymorphism. kseo.github.io. Процитовано 30 вересня 2022.
  8. Kfoury, A. J.; Wells, J. B. (1 січня 1999). Principality and decidable type inference for finite-rank intersection types. Proceedings of the 26th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. Association for Computing Machinery. с. 161—174. doi:10.1145/292540.292556. ISBN 1581130953. S2CID 14183560.
  9. Cardelli та Wegner, 1985.

Джерела

Read other articles:

Ukuran-ukuran ISO 269(mm × mm) Seri C C0 917 × 1297 C1 648 × 917 C2 458 × 648 C3 324 × 458 C4 229 × 324 C5 162 × 229 C6 114 × 162 C7/6 81 × 162 C7 81 × 114 C8 57 × 81 C9 40 × 57 C10 28 × 40 DLE 110 × 220 Ukuran-ukuran ISO 216(mm × mm) Seri B B0 1000 × 1414 B1 707 × 1000 B2 500 × 707 B3 353 × 500 B4 250 × 353 B5 176 × 250 B6 125 × 176 B7 88 × 125 B8 62 × 88 B9 44 × 62 B10 31 × 44 Ukuran-ukuran ISO 216(mm × mm) Seri A A0 841 × 1189 A1 594 × 841 A2 420 × 594 A3 297...

 

Maria Magdalena Menjalani Laku SilihSenimanDonatelloTahun1453–1455TipeKayuUkuran188 cmLokasiMuseo dell'Opera del Duomo, Firenze Maria Magdalena Menjalani Laku Silih adalah sebuah patung kayu Maria Magdalena karya pemahat Renaisans Italia Donatello, yang dibuat pada sekitar tahun 1453–1455. Patung tersebut diyakini dibuat untuk Baptiserium Firenze. Karya tersebut sekarang disimpan di Museo dell'Opera del Duomo, Firenze. Kayu yang dipakai oleh Donatello adalah poplar putih. Sumber Cavazzini...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Maret 2009. MoscowCenterNama lengkapFootball Club MoscowJulukanThe Citizens, The CapsBerdiri2004StadionStadion E. Streltsov, Moskwa(Kapasitas: 13,200) Kostum kandang Kostum tandang FC Moskwa merupakan sebuah tim sepak bola asal Rusia yang bermain di divisi utama Lig...

Stadion SoFiStadion SoFi pada 2021Stadion SoFiLokasi di Los Angeles CountyTampilkan peta wilayah metropolitan Los AngelesStadion SoFiLokasi di CaliforniaTampilkan peta CaliforniaStadion SoFiLokasi di Amerika SerikatTampilkan peta Amerika SerikatNama lamaStadion City of Champions (fase perencanaan),[1]Stadion Los Angeles di Hollywood Park (rencana setelah konstruksi)Alamat1001 S. Stadium DriveLokasiInglewood, California, Amerika SerikatKoordinat33°57′12″N 118°20′21″W ...

 

Disambiguazione – Se stai cercando altri significati, vedi Serie A 1957-1958 (disambigua). Serie A 1957-1958 Competizione Serie A Sport Calcio Edizione 56ª (26ª di Serie A) Organizzatore Lega Nazionale Date dall'8 settembre 1957al 25 maggio 1958 Luogo  Italia Partecipanti 18 Formula girone unico Risultati Vincitore Juventus(10º titolo) Retrocessioni AtalantaVerona Statistiche Miglior marcatore John Charles (28) Incontri disputati 306 Gol segnati 879 (2,87 per incontro...

 

الدوري المنغولي لكرة القدم 2006 تفاصيل الموسم الدوري المنغولي لكرة القدم  البلد منغوليا  عدد المشاركين 12   الدوري المنغولي لكرة القدم 2005  الدوري المنغولي لكرة القدم 2007  تعديل مصدري - تعديل   الدوري المنغولي لكرة القدم 2006 هو موسم من الدوري المنغولي لكرة القدم. ك...

Kata-kata krama inggil (ditandai dengan ki) di Bausastra Jawa karya W.J.S. Poerwadarminta. Pada gambar di atas, entri yang ditandai dengan ki adalah nyrirani dan ngabdi. Kata krama inggil atau tembung krama inggil (aksara Jawa: ꦠꦼꦩ꧀ꦧꦸꦁꦏꦿꦩ​ꦲꦶꦁꦒꦶꦭ꧀) adalah kosakata bahasa Jawa yang digunakan untuk menghormati seseorang dengan cara memuliakan orang tersebut. Arti dari kata inggil adalah tinggi atau mulia.[1] Kata krama inggil hanya digunakan dalam baha...

 

Negara-negara anggota:   Negara anggota   Pengamat yang sedang berunding untuk bergabung   Pengamat saja Perjanjian tentang Pengadaan Pemerintah (Inggris: Agreement on Government Procurement, disingkat GPA) adalah sebuah perjanjian plurilateral di bawah yurisdiksi Organisasi Perdagangan Dunia (WTO) yang mulai berlaku pada tahun 1981. Perjanjian ini lalu dirundingkan ulang bersamaan dengan Putaran Uruguay pada tahun 1994 dan mulai berlaku pada tanggal 1 Januar...

 

artikel ini tidak memiliki pranala ke artikel lain. Tidak ada alasan yang diberikan. Bantu kami untuk mengembangkannya dengan memberikan pranala ke artikel lain secukupnya. (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Januari 2023. Definisi Pe...

MeksikoJulukanLos Tricolores, El TriAsosiasiFederasi Sepak Bola Meksiko (FMF)KonfederasiCONCACAF (Amerika Utara, Tengah, dan Karibia)Sub-konfederasiNAFU (Amerika Utara)Pelatih Jaime LozanoKaptenGuillermo OchoaPenampilan terbanyakAndrés Guardado (179)Pencetak gol terbanyakJavier Hernández (52)Stadion kandangEstadio AztecaKode FIFAMEXPeringkat FIFATerkini 14 1 (4 April 2024)[1]Tertinggi4 (Februari–Juni 1998, Mei–Juni 2006)Terendah33 (Juli 2009)Peringkat EloTerkini 26 2 (19 Januari...

 

2015 filmThe Here AfterFilm posterDirected byMagnus von HornWritten byMagnus Von HornProduced by Madeleine Ekman Mariusz Wlodarski StarringUlrik MuntherCinematographyŁukasz ŻalEdited byAgnieszka GlinskaProductioncompanyZentropa International SwedenRelease dates 21 May 2015 (2015-05-21) (Cannes) 11 September 2015 (2015-09-11) (TIFF) 9 October 2015 (2015-10-09) (Poland) 20 November 2015 (2015-11-20) (Sweden) Running ...

 

追晉陸軍二級上將趙家驤將軍个人资料出生1910年 大清河南省衛輝府汲縣逝世1958年8月23日(1958歲—08—23)(47—48歲) † 中華民國福建省金門縣国籍 中華民國政党 中國國民黨获奖 青天白日勳章(追贈)军事背景效忠 中華民國服役 國民革命軍 中華民國陸軍服役时间1924年-1958年军衔 二級上將 (追晉)部队四十七師指挥東北剿匪總司令部參謀長陸軍�...

Ernst HanfstaenglLahir(1887-02-02)2 Februari 1887München, JermanMeninggal6 November 1975(1975-11-06) (umur 88)München, Jerman BaratAlmamaterUniversitas Harvard Ernst Franz Sedgwick Hanfstaengl (2 Februari 1887 – 6 November 1975) adalah seorang pengusaha Jerman Kehidupan awal Ernst Hanfstaengl, yang berjuluk Putzi,[1] lahir di München, Jerman, sebagai putra dari seorang penerbit seni Jerman, Edgar Hanfstaengl, dan seorang ibu Amerika. Ia menjalani sebagian besar tahun-tahun ...

 

International law human rights statement Diplomat Friedrich Martens from which the clause takes its name. The Martens Clause (pronounced /mar'tɛnz/) is an early international law concept first introduced into the preamble of the 1899 Hague Convention II – Laws and Customs of War on Land.[1] There are differing interpretations of its significance on modern international law, with some scholars simply treating the clause as a reminder international customary law still applies aft...

 

Australian political theorist (1930–2013) Kenneth MinogueMinogue, c. 1980sBornKenneth Robert Minogue(1930-09-11)11 September 1930Palmerston North, New ZealandDied28 June 2013(2013-06-28) (aged 82)Guayaquil, EcuadorOther namesKen MinogueSpouses Valerie Pearson Hallett ​ ​(m. 1954; div. 2001)​Beverly Cohen (died c. 2010)Academic backgroundAlma materUniversity of SydneyLondon School of EconomicsInfluencesJohn AndersonAcademi...

This article is about the village in Jharkhand, India. For its namesake community development block, see Sarath, Deoghar. For other uses, see Sarath. Village in Jharkhand, IndiaSarathVillageSarathLocation in Jharkhand, IndiaShow map of JharkhandSarathSarath (India)Show map of IndiaCoordinates: 24°14′12″N 86°50′16″E / 24.23667°N 86.83778°E / 24.23667; 86.83778Country IndiaStateJharkhandDistrictDeogharPopulation (2011) • Total5,692Langua...

 

Indian theatre personality, filmmaker Gubbi VeerannaBorn24 January 1891Gubbi, Kingdom of Mysore, (present day in Tumkur District, Karnataka), IndiaDied18 October 1972Bangalore (St. Martha's Hospital)Occupation(s)Theatre director, actorSpouse(s)Sundaramma, Bhadramma, B. JayammaChildren11 Gubbi Hampanna Veeranna (1891 – 1972) was an Indian theatre director. He was one of the pioneers and most prolific contributors to Kannada theatre. He established the drama company, Gubbi Sree Channabasavesh...

 

Area in Enfield, London Human settlement in EnglandClay HillRose and Crown Public House, Clay Hill, EnfieldClay HillLocation within Greater LondonOS grid referenceTQ325988London boroughEnfieldCeremonial countyGreater LondonRegionLondonCountryEnglandSovereign stateUnited KingdomPost townENFIELDPostcode districtEN2Dialling code020PoliceMetropolitanFireLondonAmbulanceLondon UK ParliamentEnfield NorthLondon AssemblyEnfield and Haringey List of places U...

Academic journalHarvard Law ReviewDisciplineLawLanguageEnglishPublication detailsHistory1887–presentPublisherThe Harvard Law Review Association (United States)Frequency8/yearImpact factor4.680 (2018)Standard abbreviationsISO 4 (alt) · Bluebook (alt1 · alt2)NLM (alt) · MathSciNet (alt )BluebookHarv. L. Rev.ISO 4Harv. Law Rev.IndexingCODEN (alt · alt2) · JSTOR (alt) · LCCN (alt)MIAR · NLM (a...

 

Ethnic violence in Kosovo Pogrom against the Serbs and March Pogrom redirect here. For other uses, see Anti-Serb riots in Sarajevo. 2004 unrest in KosovoMarch PogromRuins of Serbian houses and Serbian Orthodox monasteriesDate17–18 March 2004(1 day)LocationKosovo under UN administrationResulted in 27 dead (11 Albanians and 16 Serbs), thousands of Serbian and other non-Albanian civilians forced to leave homes[1][2] 935 houses and 35 Orthodox churches desecrated, damaged o...