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

3206 байт добавлено ,  8 лет назад
Нет описания правки
 
На практике каррирование позволяет рассматривать функцию, которая получила один из аргументов, но не все. Оператор каррирования встроен в некоторые языки программирования, что позволяет многоместные функции приводить к каррированному представлению. Примером служат языки [[ML]] и [[Haskell]]. Все языки, поддерживающие [[Замыкание (программирование)|замыкание]], позволяют записывать каррированные функции.
 
== Математическая точка зрения ==
В теоретической информатике каррирование предоставляет способ изучения функций нескольких аргументов в рамках очень простых теоретических систем, таких как [[лямбда-исчисление]]. В рамках [[теория множеств|теории множеств]], каррирование — это соответствие между множествами <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>
 
== Примеры ==
 
=== [[SWI Prolog]] ===
Пример реализации каррирования в SWI Prolog <ref>[http://pro-prof.com/archives/838 2.2 Каррирование в SWI Prolog]</ref>
<source lang="prolog">
t(A, B):- A > B, !.