Аппликативный оператор

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

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

Описание[править]

Формально аппликативный функтор — сильный лаксовый моноидальный функтор между моноидальной категорией и категорией эндофункторов. Он сохраняет не только структуру функтора, но и моноидальную структуру (тензорное произведение) с некоторым ослаблением.

В терминах Haskell это выражается через типкласс Applicative, введённый в библиотеке Control.Applicative.

Аппликативный оператор иногда называют ap (сокращённо от слова аппликация), поскольку в модуле Control.Monad существует функция ap :: Monad m => m (a -> b) -> m a -> m b, которая совпадает с <*> для монад.

Аппликативные функторы слабее монад, они позволяют комбинировать независимые вычисления параллельно, но не дают доступа к значению внутри контекста для точного принятия решений. Любая монада является аппликативным функтором (через pure = return и <*> = ap), но не наоборот.

Такой стиль предпочтителен в случаях, когда эффекты независимы, он более предсказуем и часто эффективнее.

Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикFortran (Профессор)
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++ScalaH и Ё+
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёздыПрограммист (существо)Тернарный операторUnreal MCPИсходный кодSingle-Page ApplicationGiteaForgejoCephIDEДжуниор
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplaceФреймворкБыдлокодIndex.phpОхота за жукамиКуМирКлеточный автоматПроцедурное программированиеПоиск файлов в Unix по содержимомуPetoohФункция активации нейронаПерегрузка операторов в PythonЗерокодинг
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCampUnity3DКнижный PythonMallocСвязный списокSOLIDООПУказательNULLWeLang++XenonRecompFuse.jsОптимизацияТестированиеAmbreon866Реверс-инжинирингКроссплатформенностьJSON
ЛюдиИлья КанторЮрий КлючевскийЭдуард ЛаасЭдвард СноуденСеймур Пейперт
Прочее++i + ++iДедлайн%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодачХукCurl cffiВибе-кодинг