Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost.Hana: Applicative

Boost , ,

Boost.Hana  1.0.1
Your standard library for metaprogramming
АппликацияПонятие представляетФункторс возможностью поднятия значений и комбинирования вычислений.

А.Функторможет взять нормальную функцию и сопоставить ее со структурой, содержащей значения, для получения новой структуры, содержащей значения. ИнтуитивноApplicativeтакже может принимать значение и поднимать его в структуру. Кроме того,Applicativeможет взять структуру, содержащую функции, и применить ее к структуре, содержащей значения, чтобы получить новую структуру, содержащую значения. Путем карривания функции (функций) внутри структуры можно также применять n-арные функции к n структурам, содержащим значения.

Note
This documentation does not go into much details about the nature of applicatives. However, the Typeclassopedia is a nice Haskell-oriented resource where such information can be found.

Minimal complete definition

приподнятьиапудовлетворяющие нижеприведенным законам.Прикладнойтакже должен бытьФунктор.

Laws

При наличииПрименимогоFдолжны соблюдаться следующие законы:

  1. Идентичность
    Для всех объектовxsтегаF(A),
    ap(liftid), xs == xs
    [ORIG_END] -->
  2. Состав
    Для всех объектовxsметкиF(A)и функций-в-прикладном \(fs: F(B \to C) \), \(gs: F(A \to B) \),
    apap(liftcompose), fs, gs), xs) ==ap(fs,ap(gs, xs)]
    [ORIG_END] -->
  3. Гомоморфизм
    Для всех объектовxметкиAи функций \(f : A \to B \),
    ap(lift(f), lift(x)) == lift(f(x))
    [ORIG_END] -->
  4. Обмен
    Для всех объектовxтегаAи функций-в-прикладном \(fs: F(A \to B) \),
    ap(fs, lift(x)) ==ap(liftприменяется(-, x)), fs)
    , гдеapply(-, x)обозначает частичное применение функцииapplyот модуляФункциональногодо аргументаx. where apply(-, x) denotes the partial application of the apply function from the Functional module to the x argument.[ORIG_END] -->

Вследствие этих законов модельFunctorдляFудовлетворяет следующим для всех объектовxsметкиF(A)и функций \(f : A \to B \):

transform(xs, f) == ap(lift<F>(f), xs)

Refined concept

  1. Functor(свободная модель)
    Вследствие законов любоеApplicative Fможет быть сделано aFunctorпутем установки
    преобразования(xs, f) =ap(lift(f), xs)
    [ORIG_END] -->

Concrete models

хана::ленивый,хана::необязательно,хана::участный

Structure-preserving functions

прикладное преобразованиеявляется функцией \(t : F(X) \to G(X) \) между двумя прикладнымиFиG, гдеXможет быть любой метки, и которая сохраняет операции прикладного. Другими словами, для всех объектовxметкиX, функций в приложении \(fs : F(X \to Y) \) и объектовxsметкиF(X),

t(lift<F>(x)) == lift<G>(x)
t(ap(fs, xs)) == ap(t(fs), t(xs))

Variables

constexpr auto boost::hana::ap
 Lifted application.Specifically, ap applies a structure containing functions to a structure containing values, and returns a new structure containing values. The exact way in which the functions are applied to the values depends on the Applicative. More...
 
template<typename A >
constexpr auto boost::hana::lift
 Lift a value into an Applicative structure.lift<A> takes a normal value and embeds it into a structure whose shape is represented by the A Applicative. Note that the value may be a function, in which case the created structure may be applied to another Applicative structure containing values. More...
 

Variable Documentation

constexpr auto boost::hana::ap

#include<boost/hana/fwd/ap.hpp>

Initial value:
= [](auto&& f, auto&& ...x) -> decltype(auto) {
return tag-dispatched;
}

Поднята заявка. В частности,apприменяет структуру, содержащую функции, к структуре, содержащей значения, и возвращает новую структуру, содержащую значения. Точный способ применения функций к значениям зависит отApplicative.

apможет быть вызван с двумя аргументами или более; функции в структуреfпрокручиваются и затем применяются к значениям в каждомx...структура с использованием двоичной формыap. Заметим, что для этого требуется числох...должно соответствовать порядковости функций в структуреf. Иными словами,ap(f, x1, ..., xN)эквивалентно

((f' <ap> x1) <ap> x2) ... <ap> xN

гдеf'f, но вместо этого содержит карридированные функции, аxy— всего лишьap(x, y), написанный в инфиксированной нотации, чтобы подчеркнуть левую ассоциативность.

Signature

А, подпись \(\mathtt{ap} : A(T_1 \times \cdots \times T_n \to U) \times A(T_1) \times \cdots \times A(T_n) \to A(U) \.

Parameters
fСтруктура, содержащая функцию(ы).
x...Структура(ы), содержащая(ие) значение(я) и на которуюfприменяется. Число структур должно соответствовать аритмии функций в структуреf.

Example

// Copyright Louis Dionne 2013-2016
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
#include <functional>
namespace hana = boost::hana;
int main() {
// with tuples
static_assert(
hana::ap(hana::make_tuple(std::plus<>{}), hana::make_tuple(1, 2),
hana::make_tuple(3, 4, 5))
==
hana::make_tuple(
1 + 3, 1 + 4, 1 + 5,
2 + 3, 2 + 4, 2 + 5
)
, "");
// with optional values
BOOST_HANA_CONSTEXPR_LAMBDA auto multiply = [](auto a, auto b, auto c) {
return a * b * c;
};
hana::ap(hana::just(multiply), hana::just(1),
hana::just(2),
hana::just(3))
==
hana::just(1 * 2 * 3)
);
hana::ap(hana::just(multiply), hana::just(1),
hana::nothing,
hana::just(3))
==
hana::nothing
);
}
Todo:
Consider giving access to all the arguments to the tag-dispatched implementation for performance purposes.
template<typename A >
constexpr auto boost::hana::lift

Статья Boost.Hana: Applicative раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:46:58/0.0093891620635986/1