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