~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 39C53C72C9BECA32D8C0427A1B260536__1700394180 ✰
Заголовок документа оригинал.:
✰ Partial application - Wikipedia ✰
Заголовок документа перевод.:
✰ Частичное применение — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Partial_application ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/39/36/39c53c72c9beca32d8c0427a1b260536.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/39/36/39c53c72c9beca32d8c0427a1b260536__translat.html ✰
Дата и время сохранения документа:
✰ 09.06.2024 11:34:44 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 19 November 2023, at 14:43 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Частичное применение — Википедия Jump to content

Частичное применение

Из Википедии, бесплатной энциклопедии

В информатике частичное применение (или частичное применение функции ) относится к процессу фиксации ряда аргументов функции, создавая другую функцию меньшей арности . Дана функция , мы могли бы исправить (или «связать») первый аргумент, создав функцию типа . Вычисление этой функции можно представить как . Обратите внимание, что результатом применения частичной функции в этом случае является функция, принимающая два аргумента. Частичное применение иногда неправильно называют каррированием , это родственное, но отдельное понятие.

Мотивация [ править ]

Интуитивно понятно, что применение частичной функции говорит: «Если вы исправите первые аргументы функции, вы получите функцию остальных аргументов». Например, если функция div ( x , y ) = x / y , то div с параметром x , фиксированным равным 1, является другой функцией: div 1 ( y ) = div (1, y ) = 1/ y . Это то же самое, что функция inv , которая возвращает мультипликативную величину, обратную своему аргументу, определяемому inv ( y ) = 1/ y .

Практическая мотивация частичного применения заключается в том, что очень часто функции, полученные путем передачи некоторых, но не всех аргументов функции, оказываются полезными; например, во многих языках есть функция или оператор, похожие на plus_one. Частичное применение упрощает определение этих функций, например, путем создания функции, которая представляет оператор сложения с привязанной к 1 единицей в качестве первого аргумента.

Реализации [ править ]

В таких языках, как ML , Haskell и F# определяются в каррированной , функции по умолчанию форме. Предоставление меньшего количества аргументов, чем общее количество, называется частичным применением.

В языках с первоклассными функциями можно определить curry, uncurry и papplyдля явного выполнения каррирования и частичного применения. Это может повлечь за собой большие накладные расходы во время выполнения из-за создания дополнительных замыканий , тогда как Haskell может использовать более эффективные методы. [1]

Scala реализует необязательное частичное приложение с заполнителем, например def add(x: Int, y: Int) = {x+y}; add(1, _: Int)возвращает возрастающую функцию. Scala также поддерживает каррирование нескольких списков параметров, например def add(x: Int)(y: Int) = {x+y}; add(1) _.

Clojure реализует частичное приложение, используя partial функция, определенная в ее основной библиотеке. [2]

Стандартная библиотека C ++ предоставляет bind(function, args..)вернуть объект функции , который является результатом частичного применения данных аргументов к данной функции. Начиная с C++20, функция bind_front(function, args...) также предоставляется, который связывает первый sizeof...(args)аргументы функции в args. В отличие, bindпозволяет связать любой из аргументов переданной ему функции, а не только первые. Альтернативно лямбда-выражения можно использовать :

int   f  (  int   a  ,   int   b  ); 
  auto   f_partial   =   [](  int   a  )   {   return   f  (  a  ,   123  );    }; 
  утверждать  (  f_partial  (  456  )   ==   f  (  456  ,   123  )   ); 

На Яве , MethodHandle.bindTo частично применяет функцию к ее первому аргументу. [3] Альтернативно, начиная с Java 8, можно использовать лямбды:

public   static   <  A  ,   B  ,   R  >   Function  <  B  ,   R  >   частичное применение  (  BiFunction  <  A  ,   B  ,   R  >   biFunc  ,   A   значение  )   { 
     return   b   ->   biFunc  .   применить  (  значение  ,   б  ); 
  } 

В Раку assuming метод создает новую функцию с меньшим количеством параметров. [4]

Модуль Python стандартной библиотеки functools включает в себя partial функция, позволяющая привязывать позиционные и именованные аргументы, возвращая новую функцию. [5]

В XQuery заполнитель аргумента ( ?) используется для каждого нефиксированного аргумента в приложении частичной функции. [6]

Определения [ править ]

В простом лямбда-исчислении с типами функций и продуктов ( λ →,× ) частичное применение, каррирование и некаррирование можно определить как

papply
((( а × б ) → c ) × а ) → ( б c ) знак равно λ ( ж , Икс ). λy . е ( х , у )
curry
(( а × б ) → c ) → ( а → ( б c )) знак равно λf . λx . λy . е ( х , у )
uncurry
( а → ( б c )) → (( а × б ) → c ) знак равно λf . λ ( Икс , у ). FXY

Обратите внимание, что curry papply = curry.

формулировка примеры Математическая и

Частичное применение может быть полезным способом определить несколько полезных понятий математики.

Данные наборы и и функция , можно определить функцию

где это набор функций . Образ под этой картой находится . Это функция, которая отправляет к . Часто встречаются конструкции это означает, что образ ограничивается некоторым подмножеством функций , как показано в следующих примерах.

Групповые действия [ править ]

Групповое действие можно понимать как функцию . Частичная оценка ограничивается группой биекций из самому себе. Аксиомы группового действия дополнительно гарантируют является групповым гомоморфизмом .

Внутренние произведения и каноническое отображение на двойственное [ править ]

Внутренний продукт в векторном пространстве над полем это карта . Частичная оценка обеспечивает каноническую карту в двойственное векторное пространство . . Если это скалярное произведение гильбертова пространства , теорема о представлении Рисса гарантирует, что это изоморфизм .

Перекрестные произведения и присоединенное Ли алгебр отображение

Частичное применение векторного произведения на является . Изображение вектора это линейная карта такой, что . Компоненты можно найти .

Это тесно связано с присоединенным отображением для алгебр Ли . Алгебры Ли снабжены скобкой . Частичное приложение дает карту . Аксиомы скобки гарантируют, что это отображение является гомоморфизмом алгебр Ли.

См. также [ править ]

Ссылки [ править ]

  1. ^ Марлоу и Пейтон Джонс, 2004 г.
  2. ^ «clojure/clojure, частичная функция» . Гитхаб . Проверено 18 июля 2020 г.
  3. ^ «MethodHandle (платформа Java SE 7)» . docs.oracle.com . Проверено 12 сентября 2018 г.
  4. ^ «Метод предположения» . docs.perl6.org . Проверено 12 сентября 2018 г.
  5. ^ «10.2. functools — Функции высшего порядка и операции над вызываемыми объектами — Документация Python 3.7.0» . docs.python.org . Проверено 12 сентября 2018 г.
  6. ^ «XQuery 3.1: язык запросов XML» . www.w3.org . Проверено 12 сентября 2018 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 39C53C72C9BECA32D8C0427A1B260536__1700394180
URL1:https://en.wikipedia.org/wiki/Partial_application
Заголовок, (Title) документа по адресу, URL1:
Partial application - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)