Недоопределённое множество - это составной терм, построенный из набора (возможно, пустого) элементов, заключённого в фигурные скобки. Элементы недоопределённого множества задаются в виде пар
"имя_элемента: значение_элемента",
где имя элемента - некоторый символ или неотрицательное целое число, а значение элемента - терм или выражение:элементы_множества = [ элементы_множества "," ] элемент_множества элемент_множества = имя_элемента [ ":" терм_или_выражение ] | атрибут имя_элемента = символ | числовой_литерал
Если в составе элемента множества не заданы терм или выражение после имени элемента, значением такого элемента считается анонимная переменная "_". В таких случаях символы, используемые в качестве имён элементов, обязательно должны быть в апострофах.
Если недоопределённое множество используется в составе определения класса, то имена элементов множества, совпадающие с атрибутами этого класса, должны быть символами в апострофах.
Если в качестве элемента множества задан атрибут Name, то именем элемента множества считается символ 'Name', а значением - слот Name.
Заголовком недоопределённого множества называется значение элемента с именем 0 (ноль), которое может быть задано в начале недоопределённого множества, за пределами фигурных скобок. При таком способе определения в качестве заголовка недоопределённого множества разрешается использовать только простые термы:
Недоопределённое множество вида
F{x1:A1,x2:A2,...,xn:An|Rest},
в составе которого задан заголовок F, эквивалентно{0:F,x1:A1,x2:A2,...,xn:An|Rest}.
В случае если набор элементов множества (учитывая заголовок) не является пустым, в составе множества может быть задан дополнительный компонент, обозначающий неопределённый остаток (хвост) множества. Если недоопределённое множество используется в составе определения атрибутов класса, в качестве хвоста этого множества разрешается использовать только переменные.
недоопределённое_множество = [ простой_терм ] "{" элементы_и_хвост_множества "}" элементы_и_хвост_множества = [ элементы_множества ] [ "|" хвост ]
Недоопределённое множество не может содержать пары с одинаковыми именами элементов.
Для того чтобы построить значение недоопределённого множества, необходимо:
<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>.
{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. СОСТАВНЫЕ ТЕРМЫ
КОРНЕВАЯ СТРАНИЦА
ОГЛАВЛЕНИЕ
СПИСОК ПОНЯТИЙ ЯЗЫКА (ИНДЕКС)