(deftemplate goal (slot move) (slot on-top-of)) (deffacts initial-state (stack A B C) (stack D E F) (goal (move C) (on-top-of E))) (defrule move-directly ?goal < — (goal (move ?block1) (on-top-of ?block2)) ?stack-1 < — (stack ?block1 $?rest1) ?stack-2 < — (stack ?block2 $?rest2)
(retract ?goal ?stack-1 ?stack-2) (assert (stack $?rest1)) (assert (stack ?block1 ?block2 $?rest2)) (printout t ?block1 "moved on top of" ?block2 crlf)) (defrule move-to-floor > ?goal < — (goal (move ?block1) (on-top-of floor)) ?stack-1 < — (stack ?block1 $?rest)
(retract ?goal ?stack-1) (assert (stack ?block1)) (assert (stack $?rest)) (printout t ?block1 "moved to the floor." crlf)) (defrule clear-upper-block (goal (move ?block)) (stack ?top $? ?block $?)
(assert (goal (move ?top) (on-top-of floor)))) (defrule clear-lower-block (goal (on-top-of ?block)) (stack ?top $? ?block $?)
(assert (goal (move ?top) (on-top-of floor))))
Результат работы CLIPS в данном случае будет следующий:
CLIPS$>$ (run) A moved to the floor. B moved to the floor. D moved to the floor. C moved on top of E CLIPS$>$
В завершение лекции читателю может быть рекомендована книга Ж.Гурратано [94], содержащая множество примеров программирования ЭС на основе CLIPS.
Итак, завершающий вывод по данной лекции. Экспертные системы является эффективным и универсальным инструментом для таких задач. Они работают. Их могут уже не называть экспертными системами. Их могут называть просто системами управления, системами мониторинга, системами диагностики. Суть от этого не меняется. Мощные базы знаний, заложенные в создаваемые человеком аппаратно-программные комплексы, позволяют строить новое поколение интеллектуальных робототехнических систем.