Онтологический анализ и представление знаний
Утверждение, смысл которого, например, состоит в следующем:
;Т А… означает, что А правдолюбец; ;F А… означает, что А лжец.; ;Утверждение может иметь под собой; ;основание (reason) – обычно это тэг; ;высказывания (объекта statement) или тэг; ;другого утверждения (объекта claim).; ;Утверждение также характеризуется признаком scope,; ;который может принимать значение "истина" или "ложь", (deftemplate claim (multifield content (type SYMBOL)) (multifield reason (type INTEGER) (default 0)) (field scope (type SYMBOL)))
Например, раскрыв содержимое приведенного выше высказывания в предположении, что А говорит правду, получим следующее утверждение (объект claim):
(claim (content F A) (reason 1) (scope truth)).
Таким образом, объект claim наследует содержимое от объекта statement. Последний становится обоснованием (reason) данного утверждения. Поле scope объекта claim принимает значение предположения о правдивости или лживости этого высказывания.
Еще нам потребуется представление в программе того мира (world), в котором мы в настоящее время находимся. Объекты world порождаются в момент, когда мы формируем определенные предположения. Нужно иметь возможность различать разные множества предположений – и идентифицировать их в программе в тот момент, когда процесс размышлений приводит нас к противоречию.
Например, противоречие между высказываниями Т(А) и F(A) отсутствует, если они истинны в разных мирах, т.е. при разных предположениях. Если у вас есть на сей счет сомнения, вернитесь вновь к примерам в самом начале раздела А.4.
Миры будем представлять в программе следующим образом:
;;Объект world представляет контекст, ;;сформированный определенными предположениями ;;о правдивости или лживости персонажей. ;;Объект имеет уникальный идентификатор в поле tag, ;;а смысл допущения – истинность или лживость – ;;фиксируется в поле scope, (deftemplate world (field tag (type INTEGER) (default 1)) (field scope (type SYMBOL) (default truth)))
Обратите внимание на то, что при указанных в шаблоне значениях по умолчанию мы можем начинать каждый процесс вычислений с объекта world, имеющего в поле значение 1, причем этот "мир" можно заселить высказываниями персонажей, которых мы предположительно считаем правдолюбцами. Таким образом можно инициализировать базу фактов the-facts для задачи Р0 следующим образом:
;; Утверждение, что А лжец. (deffacts the-facts (world) (statement (speaker A) (claim FA)))
Если этот оператор deffacts будет включен в тот же файл, что и объявления шаблонов (а также правила, о которых речь пойдет ниже), то после загрузки этого файла в среду CLIPS нам понадобится для запуска программы дать только команду reset.