ConceptPortal-public/rsconcept/frontend/src/features/help/items/rslang/help-rslang-expression-structure.tsx

124 lines
5.9 KiB
TypeScript
Raw Normal View History

2025-08-18 22:30:26 +03:00
import { LinkTopic } from '../../components/link-topic';
import { HelpTopic } from '../../models/help-topic';
export function HelpRSLangExpressionStructure() {
return (
<div>
<h1>Структурные выражения</h1>
<p>
Структурные выражения в языке родов структур используются для преобразований, меняющий{' '}
<LinkTopic topic={HelpTopic.RSL_TYPIFICATION} text='типизацию' /> аргументов, позволяя порождать структурно
зависимые или структурно новые понятия.
</p>
<h2>Порождение структур</h2>
<ul>
<li>
<b>Булеан / Множество подмножеств</b>: <code>(X1)</code> множество всех подмножеств <code>X1</code>.
</li>
<li>
<b>Декартово произведение</b>: <code>X1×X2</code> множество всех пар элементов из <code>X1</code> и{' '}
<code>X2</code>.
</li>
<li>
<b>Кортеж</b>: <code>(a, b, c)</code> упорядоченная n-ка (n 2).
</li>
<li>
<b>Перечисление</b>: <code>{'{a, b, c}'}</code> неупорядоченная n-ка (n 1).
</li>
<li>
<b>Синглетон / буль</b>: <code>bool(a)</code> = <code>{`{a}`}</code> множество, состоящее из одного
элемента.
</li>
</ul>
<h2>Производные структуры</h2>
<ul>
<li>
<b>Множество-сумма</b>: <code>red(S1)</code> объединение элементов всех множеств в <code>S1</code>. Операция
применима только к множествам, состоящим из множеств.
</li>
<li>
<b>Десинглетон / дебуль</b>: <code>debool({`{a}`})</code> = <code>a</code> извлечение единственного элемента
из множества. Операция применима только к множествам с одним элементом.
</li>
<li>
<b>Малая проекция</b>: <code>pr1((a1, , an))</code> = <code>a1</code>.
</li>
<li>
<b>Большая проекция</b>: <code>Pr1(S1)</code> множество первых компонентов всех кортежей из <code>S1</code>.
</li>
</ul>
<p>
Индексы у операций над кортежами для упрощения отображаются равными 1, но их можно заменить на другие
натуральные числа или их последовательность, разделенная запятой.
</p>
<h2>Мультииндексы</h2>
<p>
Вместо одного индекса можно использовать <b>мультииндекс</b> последовательность натуральных чисел через
запятую. В этом случае проекция или фильтр возвращает сразу несколько позиций кортежа.
</p>
<ul>
<li>
<code>pr1,3((a1, a2, a3, a4)) = (a1, a3)</code>
</li>
<li>
<code>Pr2,4(S1)</code> множество пар, составленных из второй и четвёртой компонент кортежей из{' '}
<code>S1</code>.
</li>
</ul>
<h2>Фильтр</h2>
<ul>
<li>
<b>Фильтр</b>: <code>Fi1[D1](S1)</code> подмножество <code>S1</code>, в котором для каждого элемента первая
проекция принадлежит <code>D1</code>.
</li>
<li>
К фильтру применим <b>мультииндексы</b>, тогда нужно указывать столько же параметров в квадратных скобках.
</li>
<li>
Допустимо использование мультииндексов в фильтре с одним параметром. Тогда проверяется принадлежность
параметру кортежа, составленного из соответствующих проекций элементов фильтруемого множества.
</li>
<li>
<b>Мультифильтр</b>: <code>Fi1,2[D1](S1)</code> отличается от фильтра с мультииндексом{' '}
<code>Fi1,2[Pr1(D1), Pr2(D2)](S1)</code> тем, что в первом случае проверяется принадлежность парам из D1, а во
втором полному декартову произведению проекций D1
</li>
</ul>
<h2>Примеры</h2>
<ul>
<li>
<code>{`(2) = {{}, {1}, {2}, {1, 2}}`}</code>
</li>
<li>
<code>(1,2,3)</code> кортеж из трёх чисел
</li>
<li>
<code>pr2((5, 4, 3, 2, 1)) = 4</code>
</li>
<li>
<code>
Pr3({`{(1, 2, 3),(4, 5, 6)}`}) = {`{3, 6}`}
</code>
</li>
<li>
<code>
red({`{{1, 2, 3},{3, 4}}`}) = {`{1, 2, 3, 4}`}
</code>
</li>
<li>
<code>bool(1) = {`{1}`}</code>, <code>debool({`{1}`}) = 1</code>
</li>
<li>
<code>{`Fi2[{2, 4}]({((1, 2), (3, 4), (5, 6))}) = {((1, 2), (3, 4))}`}</code>
</li>
</ul>
</div>
);
}