3.2.3. НЕДООПРЕДЕЛЕННЫЕ МНОЖЕСТВА

Недоопределенное множество - это составной терм, построенный из набора (возможно, пустого) элементов, заключенного в фигурные скобки. Элементы недоопределенного множества задаются в виде пар

"имя_элемента: значение_элемента",

где имя элемента - некоторый символ или неотрицательное целое число, а значение элемента - терм или выражение:

 элементы_множества =
    [ элементы_множества "," ] элемент_множества
 элемент_множества =
    имя_элемента [ ":" терм_или_выражение ] | атрибут
 имя_элемента = символ | числовой_литерал

Если в составе элемента множества не заданы терм или выражение после имени элемента, значением такого элемента считается анонимная переменная "_". В таких случаях символы, используемые в качестве имен элементов, обязательно должны быть в апострофах.

Если недоопределенное множество используется в составе определения класса, то имена элементов множества, совпадающие с атрибутами этого класса, должны быть символами в апострофах.

Если в качестве элемента множества задан атрибут Name, то именем элемента множества считается символ 'Name', а значением - слот Name.

Заголовком недоопределенного множества называется значение элемента с именем 0 (ноль), которое может быть задано в начале недоопределенного множества, за пределами фигурных скобок. При таком способе определения в качестве заголовка недоопределенного множества разрешается использовать только простые термы:

Недоопределенное множество вида

F{x1:A1,x2:A2,...,xn:An|Rest},

в составе которого задан заголовок F, эквивалентно

{0:F,x1:A1,x2:A2,...,xn:An|Rest}.

В случае если набор элементов множества (учитывая заголовок) не является пустым, в составе множества может быть задан дополнительный компонент, обозначающий неопределенный остаток (хвост) множества. Если недоопределенное множество используется в составе определения атрибутов класса, в качестве хвоста этого множества разрешается использовать только переменные.

 недоопределенное_множество =
    [ простой_терм ] "{" элементы_и_хвост_множества "}"
 элементы_и_хвост_множества = [ элементы_множества ] [ "|" хвост ]

Недоопределенное множество не может содержать пары с одинаковыми именами элементов.

Для того чтобы построить значение недоопределенного множества, необходимо:

  1. Просмотреть полный текст программы и построить множество S всех имен элементов всех недоопределенных множеств, которые в ней используются.
  2. С помощью лексикографического упорядочения из элементов множества S построить цепочку s1,s2,...,sm (m - мощность множества S).
  3. Если недоопределенное множество обозначает конечное число элементов (случай {sX:AX,sY:AY,...,sZ:AZ}), его значением является кортеж длины m+1:

    <set,...,z,...,t(AY),...,z,...,t(AX),...,t(AZ),...>,

    где set - специальная константа, t - имя вспомогательного функтора. Каждая позиция i+1 (i=1,...,m) кортежа содержит значение t(Ai), если пара с именем элемента si присутствует в рассматриваемом терме, или, если такая пара не обнаружена, специальную константу z. Значением пустого множества {}, в частности, является кортеж вида

    <set,z,z,z,z,...z,z,z>.

  4. Значением недоопределенного множества общего вида

    {sX:AX,sY:AY,...,sZ:AZ|Rest}

    является кортеж длины m+1:

    G1 = <set,...,V1,...,t(AY),...,V2,...,t(AX),...>,

    каждая позиция i+1 (i=1,...,m) которого содержит t(Ai), если пара с именем элемента si присутствует в рассматриваемом терме, или некоторую уникальную переменную Vj, если соответствующая пара не обнаружена. Кроме того, понадобится еще один кортеж

    G2 = <set,...,V1,...,z,...,V2,...,z,...>,

    который отличается от предыдущего тем, что все аргументы t(A) в нем заменены константами z. Считается, что всякий раз, когда создается значение недоопределенного множества G1, одновременно с этим происходит унификация G2 с переменной Rest.

Пример. Правильно построенные недоопределенные множества:

R2{x:17,y:-(1+X),'z',5:'yes'}, {q:Y,e:W,symbol:_,k:0|W}, {}

Ссылки: анонимная переменная 2.1.1, атрибут 4.1.1, выражение 6.2.2, значение терма 3, имя элемента 3.2.3, класс 4.1, недоопределенное множество 3.2.3, переменная 2.1.1, программа 4, простой терм 3.1, символ 2.1.2, символ в апострофах 2.1.2, слот 5.1, составной терм 3.2, терм 3, терм или выражение 3.2.1, унификация 3.3, функтор 3, хвост 3.2.2, число 3.1, числовой литерал 2.1.3, элемент множества 3.2.3.


Следующий: 3.3. УНИФИКАЦИЯ ТЕРМОВ
Предыдущий: 3.2.2. СПИСКИ


3.2. СОСТАВНЫЕ ТЕРМЫ
КОРНЕВАЯ СТРАНИЦА
ОГЛАВЛЕНИЕ
СПИСОК ПОНЯТИЙ ЯЗЫКА (ИНДЕКС)