Для работы с неупорядоченными фактами в CLIPS предусмотрен целый ряд специальных функций. К ним относятся: fact-relation, fact-slot-names и fact-slot-value. Рассмотрим эти функции по порядку.
Функция fact-relation позволяет получить связь (relation) существующего факта с шаблоном. Связь факта с шаблоном, определенным с помощью конструктора deftemplate или неявно созданным шаблоном, определяется по первому полю факта. Это поле всегда является простым полем и используется CLIPS в качестве имени шаблона, с которым связан факт. Таким образом, функция fact-relation просто возвращает первое поле факта, или значение false, если указанный факт не найден.
Определение 5.11. Синтаксис команды fact-relation
(fact-relation <определение-факта>)
В качестве определения факта, как и в описанных выше функциях, нужно использовать или переменную указатель, содержащую адрес факта, или индекс факта.
Пример 5.18. Использование функции fact-relation
(clear)
(assert (car Ford))
(fact-relation 0)
(retract 0)
(fact-relation 0)
В первом случае функция fact-relation вернет значение car, а во втором —FALSE.
|
|
Для получения имен всех слотов заданного факта в CLIPS предназначена функция fact-slot-names.
Определение 5.12. Синтаксис команды fact-slot-names
(fact- slot-names <определение-факта>)
Данная функция возвращает список имен слотов в составном поле. Для упорядоченных фактов функция возвращает значение implied (подразумеваемый), т. к., если вы помните, CLIPS представляет упорядоченные факты как неявно заданные неупорядоченные с одним составным слотом. В случае если заданный факт не найден, функция возвращает значение false.
Пример 5.19. Использование функции fact-slot-names
(clear)
(deftemplate car
(slot name)
(slot producer)
(slot type)
(slot max-speed))
(assert (car
(name scorpio)
(producer ford)
(type sedan)
(max-speed 180)))
(fact-slot-names 0)
Если приведенный пример был набран без ошибок, то функция fact-slot-names вернет значение (name producer type max-speed).
Последней из рассмотренных в данной главе функций для работы с неупорядоченными фактами будет функция fact-slot-value.