Currying (az angol currying , néha - currying szóból ) - egy függvény átalakítása sok argumentumból függvénykészletté, amelyek mindegyike egy argumentum függvénye. Egy ilyen átalakítás lehetőségét először Gottlob Frege írásai jegyezték meg, amelyet Moses Scheinfinkel szisztematikusan tanulmányozott az 1920-as években, és Haskell Curryről, a kombinatorikus logika fejlesztőjéről nevezték el , amelyben alapvető az egyetlen érv függvényeire való redukálás.
Két argumentum függvényében a curry operátor konverziót hajt végre – típus argumentumot vesz fel, és egy típus függvényt ad vissza . Intuitív módon egy függvény curry-je lehetővé teszi néhány argumentum javítását, miközben visszaadja a függvényt a többi argumentumból. Tehát a típus függvénye .
A decurrying ( eng. uncurring ) inverz transzformációként kerül bevezetésre - a curried argumentum visszaállítása: függvényesetén a decurring operátorhajtja végre a transzformációt; a decurry operátor típusa.
A gyakorlatban a currying lehetővé teszi egy olyan függvény figyelembevételét, amely nem kapta meg az összes megadott argumentumot. A curry operátor egyes programozási nyelvekbe be van építve, hogy lehetővé tegye a többhelyes függvények curriálását, az ilyen nyelvek leggyakoribb példái az ML és a Haskell . Minden nyelv, amely támogatja a lezárásokat , lehetővé teszi curry függvények írását.
Az elméleti számítástechnikában a currying módot ad több argumentum függvényeinek vizsgálatára olyan nagyon egyszerű elméleti rendszereken belül, mint a lambda-számítás . A halmazelméletben a curry a halmazok és a halmazok közötti megfelelés . A kategóriaelméletben a curry az exponenciális univerzális tulajdonságából származik ; egy karteziánus zárt kategória helyzetében ez a következő megfeleléshez vezet. Bijekció van a bináris szorzatból származó morfizmusok és a morfizmusok exponenciálissá tétele között , amely természetes és a -hoz képest . Ez az állítás egyenértékű azzal a ténnyel, hogy a szorzatfunktor és a Hom-függvény adjunkt funktorok.
Ez a Descartes-féle zárt kategória , vagy általánosabban egy zárt monoid kategória kulcstulajdonsága . Az első elégséges a klasszikus logikához, de a második kényelmes elméleti alap a kvantumszámításhoz . A különbség az, hogy a Descartes-szorzat csak két objektumpárról tartalmaz információt, míg a monoidális kategória definíciójában használt tenzorszorzat alkalmas összefonódott állapotok leírására [1] .
A Curry-Howard levelezés szempontjából a curry funkciók megléte (típus lakhatóság és decurrying (típus lakhatóság ) egyenértékű egy logikai kijelentéssel ( a terméktípus a kötőszónak , a funkcionális típus pedig az implikációnak felel meg ). Curry és decurrying függvények Scott szerint folyamatosak .
A curryinget széles körben használják programozási nyelvekben , elsősorban azokban, amelyek támogatják a funkcionális programozási paradigmát . Egyes nyelveken a függvények alapértelmezés szerint curriáltak, azaz a többhelyes függvények magasabb rendű egyhelyes függvényekként vannak megvalósítva, és az argumentumok alkalmazása részleges alkalmazások sorozata .
Az első osztályú funkciókkal rendelkező programozási nyelvek általában műveleteket határoznak meg curry(a nézet aláírási A, B -> Cfunkciójának lefordítása aláírási funkcióvá A -> B -> C) és uncurry(a fordított transzformáció végrehajtása - a nézet aláírási funkciójának leképezése A -> B -> Caz űrlap kéthelyes függvényére A, B -> C). Ezekben az esetekben a részleges alkalmazási művelettel való kapcsolat átlátható papply: curry papply = curry.