Функции для работы с неупорядоченными фактами
Для работы с неупорядоченными фактами в 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. Определение 5.13. Синтаксис команды fact-slot-value
(fact-slot-value <определение-факта> <имя-слота >) Данная функция позволяет получать значения слота некоторого заданного факта. Если факт является упорядоченным, то для получения значения неявно определенного составного слота используется значение implied. В случае если указанный факт не существует, или имя слота указано не верно, функция возвращает значение false. Рис. 5.16. Результат использования функции fact-slot-value
Выполните в среде CLIPS следующий пример: Пример 5.20. Использование функции fact-slot-value
(clear) (deftemplate foo (slot bar) (multislot yak) (assert (foo (bar 1) (yak 23))) (fact-slot-value 0 bar) (fact-slot-value 0 yak) (assert (another a b с)) (fact-slot-value 1 implied)
Если предыдущий пример был выполнен без ошибок, то полученный результат должен соответствовать приведенному на рис. 5.16.
|