Каррирование: различия между версиями

3 байта добавлено ,  6 лет назад
м
Оформление
(→‎JavaScript: Function.prototype.bind в ECMAScript 5)
м (Оформление)
В теоретической информатике каррирование предоставляет способ изучения функций нескольких аргументов в рамках очень простых теоретических систем, таких как [[лямбда-исчисление]]. В рамках [[теория множеств|теории множеств]], каррирование — это соответствие между множествами <math>\scriptstyle A^{B\times C}</math> и <math>\scriptstyle\left(A^C\right)^B</math>. В [[теория категорий|теории категорий]] каррирование появляется благодаря [[универсальное свойство|универсальному свойству]] [[экспоненциал]]а; в ситуации [[декартово замкнутая категория|декартово замкнутой категории]] это приводит к следующему соответствию. Существует биекция между множествами морфизмов из бинарного [[произведение (теория категорий)|произведения]] <math>\scriptstyle f \colon (X \times Y) \to Z </math> и морфизмами в экспоненциал <math>\scriptstyle g \colon X \to Z^Y </math>, которая [[естественное преобразование|естественна]] по X и по Z. Это утверждение эквивалентно тому, что функтор произведения и [[функтор Hom]] — сопряженные функторы.
 
Это является ключевым свойством декартово замкнутой категории, или, более общо, [[замкнутая моноидальная категория|замкнутой моноидальной категории]]. Первой вполне достаточно для классической логики, однако вторая является удобной теоретической основой для [[квантовый компьютер|квантовых вычислений]]. Различие состоит в том, что декартово произведение содержит только информацию о паре двух объектов, тогда как тензорное произведение, используемое в определении [[моноидальная категория|моноидальной категории]], подходит для описания [[квантовая запутанность|запутанных состояний]].<ref>John c. Baez and Mike Stay, «[http://math.ucr.edu/home/baez/rosetta/rose3.pdf Physics, Topology, Logic and Computation: A Rosetta Stone]», (2009) [http://arxiv.org/abs/0903.0340/ ArXiv 0903.0340] in ''New Structures for Physics'', ed. Bob Coecke, ''Lecture Notes in Physics'' vol. '''813''', Springer, Berlin, 2011, pp. 95-174.</ref>.
 
== Примеры ==
 
=== [[PHP]] ===
Работает начиная с PHP 5.3, в котором были добавлены [[Замыкание (программирование)|замыкания]].<ref>[http://zaemis.blogspot.com/2009/06/currying-in-php.html Currying in PHP]</ref>.
<source lang="php">
function curry($x) {
 
=== [[Objective-C]] ===
Пример реализации каррирования в Objective-C с использованием блоков (blocks):
<source lang="objc">
 
 
=== [[SWI Prolog]] ===
Пример реализации каррирования в SWI Prolog<ref>[http://pro-prof.com/archives/838 2.2 Каррирование в SWI Prolog]</ref>ː
<source lang="prolog">
t(A, B):- A > B, !.