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

Semantics

Boost , Chapter 1. Boost.Icl , Chapter 1. Boost.Icl

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

& #8220;Красота является конечной защитой от сложности& #8221;Дэвид Гелернтер

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

Commutativity<T,+>:
T a, b; a + b == b + a;

Конечно, это можно закодировать как правильный шаблон класса c++, который был сделан для проверкиicl. Для простоты мы будем использовать псевдокод.

Законы, описывающие семантику шаблонов классовicl, валидировались с использованием основанного на законе тестового автоматаLaBatea, инструмента, который генерирует экземпляры для переменных закона, а затем проверяет его валидность. Посколькуiclимеет дело с наборами, картами и отношениями, которые являются хорошо известными объектами из математики, законы, которые мы используем, в основномпереработаны. Также некоторые из этих законов сгруппированы в понятиях, таких как, например,упорядоченияилиалгебры.

Lexicographical Ordering and Equality

На всех наборах и картографических контейнерах icl есть<operator <>, который реализуетстрогий слабый порядок. Семантика<operator <>такая же, как и для стела. Сортированный ассоциативный контейнер, в частностиstl::setиstl::map:

Irreflexivity<T,< > : T a;     !(a<a)
Asymmetry<T,< >     : T a,b;   a<b implies !(b<a)
Transitivity<T,< >  : T a,b,c; a<b && b<c implies a<c

<Operator<>зависит от icl:: параметр шаблона контейнера<Compare>, который реализуетстрогий слабый порядокдля контейнера<domain_type>. Для данного<Compare>заказа<operator<>реализует лексикографическое сравнение на icl::контейнерах, в котором используется<Compare>порядок для установления уникальной последовательности значений в контейнере.

Индуцированная эквивалентность<operator <>является лексикографическим равенством, которое реализуется как<operator==>.

//equivalence induced by strict weak ordering <
!(a<b) && !(b<a) implies a == b;

В этом и заключается смысл.. Лексикографическое равенство сильнее равенства элементов. Два контейнера, которые содержат одни и те же элементы, могут быть лексикографически неравными, если их элементы сортируются по-разному. Лексикографическое сравнение относится ксегментарномуаспекту. Из всех различных последовательностей, которые действительны для неупорядоченных наборов и карт, одна такая последовательность выбирается по<Compare>порядку элементов. На основе этого выбора возможна уникальная итерация.

Subset Ordering and Element Equality

В фундаментальном аспекте имеет значение только членство элементов, а не их последовательность. Таким образом, существуют функции<contained_in>и<element_equal>, которые реализуют отношение подмножества и равенство элементов. Однако функции<contained_in>и<is_element_equal>на самом деле не работают на уровне элементов. Они также работают на основе шаблонов контейнеров<Compare>параметра. В практическом плане необходимо различать лексикографическое равенство<operator==>и равенство элементов<is_element_equal>, если мы работаем с интервальным расщеплением интервальных контейнеров:

split_interval_set<time> w1, w2; //Pseudocode
w1 = {[Mon       ..       Sun)}; //split_interval_set containing a week
w2 = {[Mon .. Fri)[Sat .. Sun)}; //Same week split in work and week end parts.
w1 == w2;                        //false: Different segmentation
is_element_equal(w1,w2);         //true:  Same elements contained  

Для постоянного<Compare>порядка на ключевых элементах функция члена<contained_in>, которая определена для всех icl::контейнеров, реализуетчастичный порядокна icl::контейнерах.

with <= for contained_in,
    =e= for is_element_equal:
Reflexivity<T,<= >     : T a;     a <= a
Antisymmetry<T,<=,=e=> : T a,b;   a <= b && b <= a implies a =e= b
Transitivity<T,<= >    : T a,b,c; a <= b && b <= c implies a <= c

Индуцированная эквивалентность — это равенство элементов, реализуемое посредством функции<is_element_equal>.

//equivalence induced by the partial ordering contained_in on icl::container a,b
a.contained_in(b) && b.contained_in(a) implies is_element_equal(a, b);


PrevUpHomeNext

Статья Semantics раздела Chapter 1. Boost.Icl Chapter 1. Boost.Icl может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Boost.Icl ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 00:14:54/0.0042321681976318/0