Currying

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Rozwijanie funkcji (ang. currying) - operacja w funkcyjnych językach programowania polegająca na przekształceniu funkcji, która pobiera parę argumentów i zwraca wynik (f: (P \times Q) \rightarrow R) w funkcję, która po pobraniu argumentu zwraca funkcję, która pobiera argument i zwraca wynik (g: P \rightarrow (Q \rightarrow R)). Operacja odwrotna nosi nazwę zwijanie funkcji (ang. uncurrying).

Podstawą dla tej operacji jest ugruntowanie systemu typów w językach funkcyjnych na rachunku lambda z typami. Taki rachunek na mocy izomorfizmu Curry'ego-Howarda jest równoważny pewnej logice intuicjonistycznej, a zatem operacja ta odpowiada tautologii logiki intuicjonistycznej: ((p \land q) \implies r) \iff (p \implies (q \implies r)).

Oryginalna nazwa została zaproponowana przez Christophera Strachey'a w 1967 roku, jako nawiązanie do nazwiska logika Haskella Curry'ego.