Определение 5.1. Упорядоченный факт


 

(данное_типа_symЬо1 [поле]*)

 

Первое поле факта определяет так называемое отношение, или связь факта (relation). Термин "связь" означает, что данный факт принадлежит некото­рому определенному конструктором или неявно объявленному шаблону. Подробней речь об этом пойдет ниже. Приведем несколько примеров фактов:

 

Пример 5.1 Упорядоченные факты

 

(duck is bird)

(schoolboys is Bob Mike)

(Nuke did report)

(altitude is 1000 feet)

 

Количество полей в факте не ограничено. Поля в факте могут хранить дан­ные любого примитивного типа CLIPS, за исключением первого поля, ко­торое обязательно должно быть типа symbol. Следующие слова зарезервиро­ваны и не могут быть использованы в качестве первого поля: test, and, or, not, declare, logical, object, exist и forall. Эти слова могут использоваться в качестве имен слотов шаблонов, хотя это не рекомендуется.

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

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

Замечание

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

CLIPS различает неупорядоченные факты от упорядоченных по первому полю факта. Первое поле фактов любого типа является значением типа symbol. Если это значение соответствует имени некоторого шаблона, то факт -упорядоченный. Определение неупорядоченного факта, как и упорядочен­ного, ограничивается круглыми скобками.

Ниже приведено несколько примеров неупорядоченных фактов:

Пример 5.2. Неупорядоченные факты

 

(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))

Замечание

Порядок слотов в неупорядоченном факте не важен. Например, все приведен­ные ниже факты считаются идентичными:

 

(class (teacher "Martha Jones") (#-students 30) (Room "37A"))

(class (#-students 30) (teacher "Martha Jones") (Room "37A"))

(class (Room "37A") (#-students 30) (teacher "Martha Jones"))

В отличие от фактов, приведенных выше, упорядоченные факты из следующего примера не являются идентичными:

 

(class "Martha Jones" 30 "37А")

(class 30 "Martha Jones" "37A")

(class "37A" 30 "Martha Jones")

С неупорядоченными фактами можно выполнять те же операции, что и с упорядоченными.

Далее рассмотрим конструкторы, операции и функции, которые предостав­ляет CLIPS для работы с фактами.

Работа с фактами

CLIPS предоставляет довольно богатый набор возможностей для работы с фактами с помощью соответствующих конструкторов, операций и функ­ций. Эти возможности включают создание шаблонов с помощью конструк­тора deftemplate, создание, изменение, удаление, поиск фактов, просмотр, сохранение и загрузку списка фактов, определение списка предопределен­ных фактов с помощью конструктора deffacts и многое другое.

5.2.1. Конструктор deftemplate

Для создания неупорядоченных фактов в CLIPS предусмотрен специальный конструктор deftemplate. Его использование приводит к появлению в теку­щей базе знаний системы информации о шаблоне факта, с помощью кото­рого в систему в дальнейшем можно будет добавлять факты, соответствующие данному шаблону. Таким образом, конструктор deftemplate аналогичен операторам record и struct таких процедурных языков программирования как Pascal или С.

Приведем простой пример использования конструктора deftemplate:

 



Дата добавления: 2021-12-14; просмотров: 285;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.