Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Непозиционные факты




Пример.

Позиционные факты

Факты

Факты являются одной из основных форм представления информации в системе CLIPS. Каждый фактпредставляет собой фрагмент информации, помещенный в текущий список фактов, − так называемый fact-list. Факт представляет собой основную единицу данных, используемую правилами.

Количество фактов в списке и объем информации, который может быть сохранен в факте, ограничивается только размером памяти компьютера. При попытке добавления к списку нового факта, идентичного одному из фактов, уже включенных в список, операция игнорируется (хотя такое поведение можно изменить).

Факт может описываться индексомили адресом. При каждом добавлении или изменении факта, ему присваивается уникальный целочисленный индекс. Индексы фактов начинаются с нуля и для каждого нового или измененного факта увеличиваются на единицу. Каждый раз после выполнения команд reset и clear выделение индексов начинается с нуля.

Факт также может задаваться при помощи адреса. Адрес факта может быть получен путем сохранения возвращаемого значения команд, которые возвращают в качестве результата адрес факта (таких как assert, modify и duplicate), или путем связывания переменной с адресом факта в левой части правила (см. далее).

Идентификатор факта – это короткая запись для отображения факта на экране, состоящая из символа f и записанного через тире индекса факта. Например, запись f-10 служит для обозначения факта с индексом 10. Существует два формата представления фактов: позиционный и непозиционный.

 

Позиционные факты состоят из выражения символьного типа, за которым следует последовательность (возможно, пустая) из полей, разделенных пробелами. Вся запись заключается в скобки. Обычно первое поле определяет «отношение», которое применяется к оставшимся полям.

 

(The pump is on)

(Altitude is 10000 feet)

(Grocery_list bread milk eggs)

 

Поля в позиционных фактах могут быть любого простого типа (за исключением первого поля, которое всегда должно быть типа symbol). На порядок следования полей также не накладывается никаких ограничений.

Ряд символьных выражений зарезервированы и не должны использоваться в качестве первого поля любых видов фактов, как позиционных, так и нет: test, and, or, not, declare, logical, object, exists u forall.

 

Для того чтобы обратиться к информации, содержащейся в позиционном факте, пользователь должен знать, не только какие данные содержатся в факте, но и то, в каком поле они хранятся. Непозиционные (шаблонные) факты дают возможность пользователю абстрагироваться от структуры факта, задавая имена каждому из полей факта. Для задания шаблона, который затем может использоваться при доступе к полям по именам, используется конструкция deftemplate. Эта конструкция подобна структуре или записи в языках программирования Borland C и Pascal.

Конструкция deftemplate позволяет наряду с определением именованных полей, или слотов, вводить имя шаблона. В отличие от позиционных фактов слоты шаблонного факта могут быть ограничены по типу, значению, числовому диапазону. Кроме того, для любого слота можно определить значения по умолчанию. Слот состоит из открывающейся скобки, за которой следует имя слота, полей (могут отсутствовать) и закрывающейся скобки. Заметим, что слоты не могут использоваться в позиционных фактах, так же как позиционные поля не могут использоваться в шаблонных фактах. Общая структура конструкции deftemplate имеет вид:

(deftemplate <имя шаблона>) (slot-1) (slot-2) … (slot-N)

 

Пример. Шаблон со значениями слотов, заданными по умолчанию

(deftemplate prospect)

(slot name

(default?DERIVE)

(slot assets

(default rich)

(slot age

(default 80)))

 

Шаблонные факты отличаются от позиционных первым полем в факте. Первое поле всех фактов должно быть типа symbol, но если это символьное выражение соответствует имени шаблона, то этот факт – шаблонный. За первым полем шаблонного факта следует список из нуля или более слотов. Как и позиционные, шаблонные факты заключаются в скобки.

 

Пример. Шаблонные факты

(client (name "Joe Brown") (id X9345A))

(point-mass (x-velocity 100) (y-velocity -200))

(class (teacher "Martha Jones") (#-students 30)

(room "37A"))

(grocery-list (#-of-items 3) (items bread milk eggs))

Заметим, что порядок следования слотов в шаблонном факте не важен.

 




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 519; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.