Факты в clips. упорядоченные факты.

Основные сведения

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

Факт может описываться индексом или адресом. Всякий раз, когда факт добавляется (изменяется), ему присваивается уникальный целочисленный индекс. Индексы фактов начинаются с нуля и для каждого нового или измененного факта увеличиваются на единицу. Идентификатор факта записывается в виде f-<индекс>. Например, запись f-10 служит для обозначения факта с индексом 10.

Для просмотра текущего списка фактов используется команда facts.

Каждый раз после выполнения команд reset и clear выделение индексов начинается с нуля.

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

Примеры упорядоченных фактов:

(студент Смирнов_Сергей)

(однокурсники Иванов Петров Сидоров)

(цвет красный).

Для работы с фактами любого типа используются следующие функции:

1) (assert <список фактов>) – добавляет новые факты в текущий список. Количество фактов произвольное.

Если операция выполнена успешно, то функция возвращает адрес последнего добавленного факта, если операция по добавлению фактов была не успешной, то функция возвращает значение False.

2) (retract <индекс>) – удаляет из текущего списка произвольное количество фактов

3) (fact-relation <индекс>) – позволяет определить отношение (связь) факта с указанным индексом.

Функция возвращает значение первого поля факта, если данный факт существует, или значение false если не существует.

4) (fact-existp <индекс факта>) – позволяет определить, содержится ли в текущем списке фактов факт с указанным индексом. Если присутствует, то функция возвращается значение true, иначе false

Факты можно включать в базу данных не по одиночке, а целым массивом. Для этого в CLIPS имеется конструктор deffacts.

(deffacts <имя списка фактов><Список фактов>)

Например,

(deffacts student_list

(student Ivanov Ivan)

(student Petrov Petr)

)

Выражение начинается с команды deffacts, затем приводится имя списка фактов (в примере — student_list), а за ним следуют элементы списка, причем их количество не ограничивается. Этот массив фактов можно тем удалить из базы командой undeffacts.

Пример 1.

В режиме командной строки создать список из 3-х упорядоченных фактов вида: (vedomost <name><gruppa><ocenka>). Просмотреть полученный список. Изменить список фактов следующим образом:

1) удалить факт f-1.

2)изменить в факте f-2 значение оценки

3)изменить в факте f-3 значение группы

Решение

Для формирования списка из 3-х упорядоченных фактов в режиме командной строки записываем команду assertс перечислением необходимых фактов (рис.5)

факты в clips. упорядоченные факты. - student2.ru

Рис.5 Добавление новых фактов в режиме командной строки

Для просмотра списка фактов записываем командуfactsв командной строке (рис. 6).

факты в clips. упорядоченные факты. - student2.ru

Рис. 6 Просмотр списка фактов

Чтобы из текущего списка фактов удалить факт, используем команду retract(рис.7 )

факты в clips. упорядоченные факты. - student2.ru

Рис. 7 Удаление факта f-1 и просмотр списка фактов.

Изменить значение поля в упорядоченном факте можно, удалив старый факт и добавив новый. Чтобы изменить в факте f-2 значение оценки, необходимо егоудалить и добавить факт с новым значением оценки (рис.8)

факты в clips. упорядоченные факты. - student2.ru

Рис. 8 Замена в факте f-2 значения оценки

Аналогично выполняется замена в факте f-3 значения группы (рис. 9)

факты в clips. упорядоченные факты. - student2.ru

Рис. 9 Замена в факте f-3 значения группы

Пример 2.

С помощью конструктора deffacts создать три упорядоченных факта вида (color <название цвета>).Добавить два новых факта, используя функцию assert. Удалить факты с индексами 2 и 4.

Решение

Создайте новый файл в CLIPS, в котором конструктор deffacts определяет список фактов (рис.10 ). Сохраните файл под именем, например color-list.

факты в clips. упорядоченные факты. - student2.ru

Рис.10 Содержимое файла color-list.clp

Загрузите данный файл в CLIPS с помощью команды Load (File -> Load). Сообщение интерпретатора TRUE означает, что в файле нет синтаксических ошибок и команда загрузки выполнена корректно (рис.11 )

факты в clips. упорядоченные факты. - student2.ru

Рис. 11 Сообщение интерпретатора после загрузки файла color-list.clp

Выполните последовательно команды reset, а затем facts и просмотрите текущий список фактов:

факты в clips. упорядоченные факты. - student2.ru

Рис.12 Текущий список фактов, полученный в результате загрузки файла color-list.clp

Добавьте еще один факт:

факты в clips. упорядоченные факты. - student2.ru

Рис.13. Добавление нового факта

Просмотрите весь список:

факты в clips. упорядоченные факты. - student2.ru

Рис.14. Текущий список фактов

5. Удалите факты 2 и 3 и просмотрите окончательный список фактов

факты в clips. упорядоченные факты. - student2.ru

Рис.14 Текущий список фактов после удаления фактов f-2 и f-3

Контрольные вопросы

1. Поясните назначение фактов в Clips.

2. Как записывается индекс факта в Clips?

3. Какие типы фактов существуют в Clips?

4. Объясните структуру упорядоченных фактов.

5. Какая команда используется для просмотра текущего списка фактов?

6. Поясните назначение конструктора deffacts.

7. Какая функция используется для добавления новых фактов?

8. Какая функция используется для удаления фактов?

9. Поясните назначение функций fact-relation и fact-existp.

Задания для самостоятельной работы

1. В режиме командной строки создать список из 4-х упорядоченных фактов вида: (student <name><kurs>). Просмотреть полученный список. Изменить список фактов следующим образом: а) удалить факт f-2; б) изменить в факте f-3 значение <kurs>.

2. В режиме командной строки создать три упорядоченных факта вида (poezd <номер><пункт_назначения><время_отправления>) с помощью конструктора deffacts. Добавить два новых факта, используя функцию assert. Просмотреть полученный список фактов. Удалить факты с индексами 1,4. В фактах с индексами 2, 3 изменить время отправления.

3. В режиме командной строки создать список из 4-х упорядоченных фактов вида: (sotrudnik <fio><otdel>). Просмотреть полученный список. Изменить список фактов следующим образом: а) удалить факт f-1; б)изменить в факте f-3 значение <fio>

4. В режиме командной строки создать три упорядоченных факта вида (tovar <наименование><страна-производитель><цена><количество> ) с помощью конструктора deffacts. Добавить два новых факта, используя функцию assert. Просмотреть полученный список фактов. В фактах с индексами 2, 4 изменить цену. Удалить все факты.

Наши рекомендации