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

Boost.Hana: Group

Boost , ,

Boost.Hana  1.0.1
Your standard library for metaprogramming
Понятие<Group>представляет<Monoid>, где все объекты имеют обратную w.r.t. бинарную операцию<Monoid>.

Группапредставляет собой алгебраическую структуру, построенную поверх<Monoid>, которая добавляет способность инвертировать действие бинарной операции<Monoid>на любой элемент множества. В частности,<Group>является<Monoid><(S, +)>таким, что каждый элемент<s>в<S>имеет обратный (скажем,<s'>), который является таким, что

s + s' == s' + s == identity of the Monoid

Есть много примеров<Group>с, одним из которых была бы добавка<Monoid>на целых числах, где обратным любому целому числу<n>является целое число<-n>. Используемые здесь названия методов относятся именно к этой модели.

Minimal complete definitions

  1. minus
    Когдаminusопределен, методnegateпо умолчанию устанавливается[ORIG_END] -->
  2. negate
    Когдаnegateопределен,minusметод по умолчанию устанавливается.[ORIG_END] -->

Laws

Для всех объектов<x>из<Group><G>должны соблюдаться следующие законы:

plus(x, negate(x)) == zero<G>() // right inverse
plus(negate(x), x) == zero<G>() // left inverse

Refined concept

<Monoid>

Concrete models

<hana::integral_constant>

Free model for non-boolean arithmetic data types

Тип данных<T>является арифметическим, если<std::is_arithmetic<T>::value>является истинным. Для небулевого арифметического типа данных<T>модель<Group>автоматически определяется установкой

minus(x, y) = (x - y)
negate(x) = -x
Note
The rationale for not providing a Group model for bool is the same as for not providing a Monoid model.

Structure-preserving functions

Пусть<A>и<B>будет два<Group>. Функция<f : A -> B>называется функцией. Групповой морфизм, если он сохраняет групповую структуру между<A>и<B>. Строго, для всех объектов<x, y>типа данных<A>,

f(plus(x, y)) == plus(f(x), f(y))

Из-за структуры<Group>легко доказать, что будет удовлетворено и следующее:

f(negate(x)) == negate(f(x))
f(zero<A>()) == zero<B>()

Функции с этими свойствами прекрасно взаимодействуют с<Group>с, из-за чего и получают такую особую обработку.

Variables

constexpr auto boost::hana::minus
 Subtract two elements of a group.Specifically, this performs the Monoid operation on the first argument and on the inverse of the second argument, thus being equivalent to: More...
 
constexpr auto boost::hana::negate
 Return the inverse of an element of a group. More...
 

Variable Documentation

constexpr auto boost::hana::minus

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

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

Вычтите два элемента из группы. В частности, это выполняет операцию<Monoid>на первом аргументе и на обратном втором аргументе, таким образом, будучи эквивалентным:

minus(x, y) == plus(x, negate(y))

Cross-type version of the method

Метод<minus>«перегружен» для обработки различных типов данных с определенными свойствами. В частности,<minus>определяется дляразличныхтипов данных<A>и<B>, так что

  1. AиBимеют общий тип данныхC, определяемый метафункциейcommon.
  2. A,BиC- всеGroup, если принимать индивидуально
  3. to<C> : A -> Bиto<C> : B -> CявляютсяGroupвстраиванием, как определеноis_embeddingметафункцией.

Определение<minus>для типов данных, удовлетворяющих вышеуказанным свойствам, получено путем установки

minus(x, y) = minus(to<C>(x), to<C>(y))

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)
namespace hana = boost::hana;
int main() {
BOOST_HANA_CONSTANT_CHECK(hana::minus(hana::int_c<3>, hana::int_c<5>) == hana::int_c<-2>);
static_assert(hana::minus(1, 2) == -1, "");
}
constexpr auto boost::hana::negate

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

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

Вернитесь обратно к элементу группы.

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)
namespace hana = boost::hana;
int main() {
BOOST_HANA_CONSTANT_CHECK(hana::negate(hana::int_c<3>) == hana::int_c<-3>);
static_assert(hana::negate(2) == -2, "");
}

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 00:27:24/0.025604963302612/1