Левая часть продукции. Образцы:

< левая часть > :: = condition [< образцы >]

< образцы > :: = < образец > | < образец > | < образец > & < образец > | < образец > | < образец >

< образец > :: = < образец факта > | < образец - сравнение > | < образец - строка >

Образец - строка - проверка строки на непустоту.

Образец - сравнение - проверка, находятся ли 2 строки в заданном соотношении

< обр. факта > :: = [ ^ ](< шаблон имени факта > [спецификатор]: [< шаблон слотов >])

^ - выбрать всё

< шаблон имени факта > :: = * |< строка >| < П-переменная >

* сопоставляется с чем угодно

строка требует точного совпадения

П-переменная - всегда сопоставляется успешно и означивается.

< шаблон слота > :: = < шаблон имени слота > [< спец-р >]

< значение >[< cпец-р >]

< таблица имени слота > - такие же

Примеры : (*:) - любой факт. Образец сопоставляется, когда в БФ есть хотя бы один слот.

(>fact_name:) - сопоставляется всегда, в переменнную fact_name будет добавлено имя последнего занесённого в базу факта.

^(>fact_name:) - в переменную слева добавляется список всех фактов.

(факт1:) - сопоставляется, если в БФ есть факт с именем факт1.

(<< obj:*) - сопоставляется, если у переменной obj левое значение соответствует имени какого-либо факта, у кот-го есть хотя бы один слот.

(<<obj:sl<) - то же, но в переменную sl справа добавляется имя слота, созданного последним.

(Факт1 : слот3 = 5) - сопоставляется, если у факта 1 слот 3 имеет значение 5.

(Факт1 : слот3) - есть слот3 не имеет значения.

^(>>l : тип = НЕ

зн_вх1 = 1

зн_вых1 = 0  )

В переменную l слева добавляется имена всех интервалов, у которых на вх. 1, на вых. 0.

Спецификаторы могут стоять после имени слота, имени факта, значения слота. Они налагают дополнительные ограничения, необходимые для успеха.

< специализатор > :: = {< знак >< параметр >}

< знак > :: = <.|>|= =|!=|…

< параметр > :: = < строка >

(*{= = F1:F2}:) - в БФ есть какой-либо факт i с именами слотов F1 и F2

(>fact_name {! = “F1”}) в переменную слева добавляется имена всех фактов, кроме F1.

СМ. РИС. 252

(>l2 : выход = 1’2’3’{!=5}

вход 1 = е2<) - есть элемент l2, у которого слот выход подключен к 1,2,3 элементу, но не подключен к 5. Сопоставляется и в переменную е2 справа добавляется номер элемента, к которому подключен 1-й вход.

Рассмотрим тот же пример, если мы хотим чтобы у того элемента, к которому подключен 1-й вход, было известно значение выхода.

(>l2 : выход = 1’2’3 {!=5}

вх 1 = е2 <

{($e2 : знач. вых = * )})

При сопоставлении такого образца в переменную $е2 справа добавляется пробное значение (5). Затем это пробное значение истолковывается как имя факта, и у 5 значения проверяется значение_выхода. Если оно означено, образец сопоставляется и значение 5 переписывается из промежуточного буфера в е2.

Образцы фактов:

^ (2:выход => е1,

{ ( $ e1: знач_вых) } )

   Образец успешно составляется, если у элемента с именем 2 есть слот с именем выход, имеющий какие-либо значения. При этом все эти значения добавляются слева к переменной е1, если эти значения соответствуют именам элементов, у которых есть слоты знач_вых неозначенные. Например, пусть в е1 используют значения 7,15,22. При этом у 7-го,15-го и 22-го элементов будет предварительно наличие неозначенного слота знач_вых.

( * , тип = НЕ,

зн_вход => V1,

{ _equal ( $ V1 , 0 ) } )

   Сопоставляются успешно, когда есть хотя бы один факт со слотом тип, означенный как не, означенный слот зн_входа; если это значение равно нулю, оно должно записываться слева в переполненную V1. В ряде случаев, если не надо в переполненную V1 записать 0, его м. записать непосредственно в значение слота в образец (зн_входа = 0).

Hosted by uCoz