Неупорядоченные факты. Сохранение и загрузка фактов.
Основные сведения
Неупорядоченные(шаблонные) факты дают возможность пользователю абстрагироваться от структуры факта, задавая имена каждому из полей факта. Для задания шаблона, который затем может использоваться при доступе к полям по именам, используется конструкция deftemplate.
Структура: (deftemplate <имя шаблона>[«строка комментариев»])
(slot<имя слота 1>)
(slot<имя слота 2>)
…………………..
(slot<имя слота n>)
В шаблонном факторе значение любого слота можно задать по умолчанию с помощью служебного слова Default.
Для работы с шаблонными фактами используются функции
1) (modify <индекс факта><новое значение слота>) - используется для модификации неупорядоченного факта
Механизм работы функции modify аналогичен выполнению функции удаления и добавления факта.
2) (duplicate <индекс факта><нов. значение слота>) - позволяет копировать существующие факты по заданному шаблону, заменяя указанные значения слотов.
Список фактов любого типа может быть сохранен в текстовый файл, а также загружен из файла. Для этого определены функции:
3) (save-facts<имя файла>) - сохранение текущего списка фактов
4)(load-facts<имя файла>) - загрузка фактов из текстового файла
Пример.
Создать файл, содержащий три неупорядоченных факта вида (student (name <фамилия>) (gruppa <группа>) (date <дата рождения>)). Загрузить данные факты.
В факте с индексом 2 изменить значение слота date, факт f-1 продублировать, изменив фамилию. Сохранить полученный список фактов.
Решение.
Сначала необходимо создать файл, содержащий описание шаблона для неупорядоченных фактов вида (student (name <фамилия>) (gruppa <группа>) (date <дата рождения>)) с помощью конструктора deftemplate. Значения слота gruppa зададим по умолчанию – ПИЭ4-1.
Для этого создайте новый текстовый файл (File->New) и наберите текст:
5
Рис. 15 Описание шаблона для неупорядоченных фактов
Сохраните файл под именем lab2-1.clp.
Для создания списка фактов создайте еще один текстовый файл и запишите 3 факта:
Рис. 16 Список неупорядоченных фактов
Сохраните файл под именем lab2-1-facts.clp. Исходные файлы подготовлены.
Прежде чем загрузить список фактов, необходимо загрузить в систему шаблон, описанный в файле lab2-1.clp. Для этого загрузите данный файл с помощью команд главного меню File->Load… Если после выполнения команды выведено сообщение TRUE, можно приступить к загрузке фактов с помощью команды load-facts:
Рис. 17 Просмотр списка фактов после загрузки из текстового файла lab2-1-facts.clp
Для изменения в факте с индексом 2 значение слота date, наберите команду (modify 2 (date 12-02-1985)) и просмотрите полученный список с помощью команды (facts) (рис.18):
Рис. 18 Результат модификации факта f-2
Для дублирования факта с индексом 1, наберите команду
(duplicate 1 (name Sidorov)) и просмотрите полученный список с помощью команды (facts):
Рис. 19 Результат дублирования факта f-1
Сохраните новый список фактов:
Рис. 20 Сохранение списка фактов в текстовый файл lab2-1-facts.clp
Для проверки очистите текущий список фактов, загрузите файл lab2-1.clp и сохраненные в файле lab2-1-facts.clp факты. Просмотрите список фактов:
Рис. 21 Просмотр списка фактов после загрузки из текстового файла lab2-1-facts.clp
Контрольные вопросы
1. Какая конструкция используется для создания неупорядоченных (шаблонных) фактов? Поясните ее структуру.
2. Какая функция применяется для модификации неупорядоченного факта?
3. Какая функция используется для копирования неупорядоченного факта?
4. Какая функция используется для сохранения текущего списка фактов в текстовый файл?
5. С помощью какой функции можно загрузить факты из текстового файла?
Задания для самостоятельной работы
1. А) Создать файл, содержащий три неупорядоченных факта вида (client (name <фамилия>) (in <инд.номер>) (citi <город проживания>)). Значений слота citi задать по умолчанию. Загрузить данные факты. В факте с индексом 1 изменить значение слота citi, а в факте с индексом 2 изменить фамилию. Факт f-3 продублировать, изменив in. Сохранить полученный список фактов.
Б). Загрузить полученный список фактов. Добавить 2 новых неупорядоченных факта вида, используя функцию assert. Удалить факты с индексами 1, 3, Просмотреть полученный результат. Сохранить полученный список фактов в другой файл.
2. А) Создать файл, содержащий три неупорядоченных факта вида (sotrudnik (name <фамилия>) (otdel <отдел>) (st <стаж работы>)) Значений слота otdel задать по умолчанию. Загрузить данные факты. В факте с индексом 1 изменить значение слота otdel, а в факте с индексом 3 изменить стаж работы. Факт f-2 продублировать, изменив фамилию. Сохранить полученный список фактов.
Б) Загрузить полученный список фактов. Добавить 2 новых неупорядоченных факта вида, используя функцию assert. Удалить факты с индексами 2, 4. Просмотреть полученный результат. Сохранить полученный список фактов в другой файл.