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

Boost.Hana: Ring

Boost , ,

Boost.Hana  1.0.1
Your standard library for metaprogramming
Понятие<Ring>представляет<Group>, которые также образуют<Monoid>в рамках второй двоичной операции, которая распределяется по первой.

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

x * (y + z) == (x * y) + (x * z)

Вторая двоичная операция часто пишется<*>с ее тождеством, написанным<1>, в отношении<Ring>целых чисел при умножении. Используемые здесь названия методов относятся к этому точному кольцу.

Minimal complete definintion

<one>и<mult>удовлетворяющие законам

Laws

Для всех объектов<x>,<y>,<z>из<Ring><R>должны быть соблюдены следующие законы:

mult(x, mult(y, z)) == mult(mult(x, y), z) // associativity
mult(x, one<R>()) == x // right identity
mult(one<R>(), x) == x // left identity
mult(x, plus(y, z)) == plus(mult(x, y), mult(x, z)) // distributivity

Refined concepts

<Monoid>,<Group>

Concrete models

<hana::integral_constant>

Free model for non-boolean arithmetic data types

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

mult(x, y) = (x * y)
one<T>() = static_cast<T>(1)
Note
The rationale for not providing a Ring model for bool is the same as for not providing Monoid and Group models.

Structure-preserving functions

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

f(plus(x, y)) == plus(f(x), f(y))
f(mult(x, y)) == mult(f(x), f(y))
f(one<A>()) == one<B>()

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

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

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

Variables

constexpr auto boost::hana::mult
 Associative operation of a Ring. More...
 
template<typename R >
constexpr auto boost::hana::one
 Identity of the Ring multiplication. More...
 
constexpr auto boost::hana::power
 Elevate a ring element to its nth power.Specifically, power(x, n), is equivalent to multiplying x with itself n times using the Ring's multiplication. If the power is equal to zero, the Ring's identity (one) is returned. More...
 

Variable Documentation

constexpr auto boost::hana::mult

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

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

Ассоциативная операция<Ring>.

Parameters
x,yДва<Ring>элемента объединяются с<Ring>двоичной операцией.

Cross-type version of the method

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

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

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

mult(x, y) = mult(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;
BOOST_HANA_CONSTANT_CHECK(hana::mult(hana::int_c<3>, hana::int_c<5>) == hana::int_c<15>);
static_assert(hana::mult(4, 2) == 8, "");
int main() { }
template<typename R >
constexpr auto boost::hana::one

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

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

Идентичность умножения<Ring>.

Template Parameters
RТег (должен быть образцом<Ring>) возвращаемой идентичности.

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;
BOOST_HANA_CONSTANT_CHECK(hana::one<hana::integral_constant_tag<int>>() == hana::int_c<1>);
static_assert(hana::one<long>() == 1l, "");
int main() { }
constexpr auto boost::hana::power

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

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

Поднимите кольцевой элемент до его<n>мощности. В частности,<power(x, n)>эквивалентно умножению<x>с самим собой<n>раз с использованием умножения Кольца. Если сила равна<zero>, то идентичность Кольца<one>возвращается.

Parameters
x(67) элемент, который приподнят до своей (68) мощности.
nНеотрицательное<IntegralConstant>, представляющее силу, к которой<x>приподнята.
Note
Only the tag of x is used for tag-dispatching.

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;
BOOST_HANA_CONSTANT_CHECK(hana::power(hana::int_c<3>, hana::int_c<2>) == hana::int_c<3 * 3>);
static_assert(hana::power(2, hana::int_c<4>) == 16, "");
int main() { }

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:59:36/0.0071067810058594/0