Currya

Currying ( englanniksi  currying , joskus - currying ) - funktion muuntaminen useista argumenteista funktioiden joukkoon, joista jokainen on yhden argumentin funktio. Mahdollisuus tällaiseen muutokseen pantiin ensimmäisen kerran merkille Gottlob Fregen kirjoituksissa, joita Moses Scheinfinkel tutki systemaattisesti 1920-luvulla ja jotka nimettiin Haskell Curryn , kombinatorisen logiikan  kehittäjän mukaan , jossa pelkistys yhden argumentin funktioiksi on olennaista.

Määritelmä

Kahden argumentin funktiolle curry-operaattori suorittaa muunnoksen  - se ottaa tyyppiargumentin ja palauttaa tyypin funktion . Intuitiivisesti funktion luominen antaa sinun korjata osan sen argumenteista ja palauttaa funktion muista argumenteista. Kyseessä  on siis tyypin funktio .

Decurrying ( eng.  uncurring ) otetaan käyttöön käänteisenä muunnoksena - curried-argumentin palauttaminen: funktiolledecurring-operaattorisuorittaa muunnoksen; decurry-operaattorin tyyppi on.

Käytännössä curryn avulla voit tarkastella funktiota, joka ei saanut kaikkia annettuja argumentteja. Curry-operaattori on sisäänrakennettu joihinkin ohjelmointikieliin, jotta monipaikkatoimintoja voidaan käyttää, yleisimpiä esimerkkejä tällaisista kielistä ovat ML ja Haskell . Kaikki sulkemista tukevat kielet antavat sinun kirjoittaa curry-funktioita.

Matemaattinen näkökulma

Teoreettisessa tietojenkäsittelytieteessä currying tarjoaa tavan tarkastella useiden argumenttien toimintoja hyvin yksinkertaisissa teoreettisissa järjestelmissä, kuten lambda-laskennassa . Joukkoteoriassa currying on vastaavuus joukkojen ja . Kategoriteoriassa curryus tulee eksponentiaalin universaalista ominaisuudesta ; karteesisen suljetun kategorian tilanteessa tämä johtaa seuraavaan kirjeenvaihtoon. Binäärituloksesta peräisin olevien morfismien ja morfismien välillä on bijektio eksponentiaaliin , joka on luonnollinen suhteessa ja suhteessa . Tämä väite vastaa sitä tosiasiaa, että tuotefunktiontori ja Hom-funktiontori  ovat rinnakkaisfunktioita.

Tämä on karteesisen suljetun luokan tai yleisemmin suljetun monoidiluokan avainominaisuus . Ensimmäinen on täysin riittävä klassiseen logiikkaan, mutta toinen on kätevä teoreettinen perusta kvanttilaskentaan . Erona on, että karteesinen tulo sisältää tietoa vain kahden objektin parista, kun taas monoidaalisen luokan määrittelyssä käytetty tensoritulo soveltuu sotkeutuneiden tilojen kuvaamiseen [1] .

Curry-Howard-kirjeenvaihdon näkökulmasta curry- funktioiden olemassaolo (tyyppi asuttavuus ja decurrying (tyyppi asuttavuus ) vastaa loogista lausuntoa ( tuotetyyppi vastaa konjunktiota ja funktionaalinen tyyppi implikaatiota ). Curry- ja decurrying-  funktiot ovat jatkuvia Scottin mukaan .

Currying ohjelmoinnin näkökulmasta

Curryingia käytetään laajalti ohjelmointikielissä , ensisijaisesti niissä, jotka tukevat toiminnallista ohjelmointiparadigmaa . Joissakin kielissä funktiot ovat oletuksena curry-funktioita, toisin sanoen usean paikan funktiot toteutetaan korkeamman asteen yhden paikan funktioina , ja argumenttien käyttäminen niille on sarja osittaisia ​​sovelluksia .

Ohjelmointikielet, joissa on ensiluokkaisia ​​toimintoja , määrittelevät yleensä toiminnot curry(näkymän allekirjoitusfunktion A, B -> Ckääntäminen allekirjoitusfunktioksi A -> B -> C) ja uncurry(käänteisen muunnoksen suorittaminen - näkymän allekirjoitusfunktion yhdistäminen A -> B -> Clomakkeen kaksipaikkaiseen funktioon A, B -> C). Näissä tapauksissa yhteys osittaiseen sovellustoimintoon on läpinäkyvä papply: curry papply = curry.

Muistiinpanot

  1. John c. Baez ja Mike Stay, " Fysiikka, topologia, logiikka ja laskennat: Rosetta Stone Arkistoitu 15. toukokuuta 2013 Wayback Machinessa ", (2009) ArXiv 0903.0340 arkistoitu 20. heinäkuuta 2014 Wayback Machine in New Structures for Physics , , . Bob Coecke, Lecture Notes in Physics voi. 813 , Springer, Berliini, 2011, s. 95-174.

Kirjallisuus