лаб4 clips
.docЛабораторная работа 4
ПРОЦЕСС ИНТЕРПРЕТАЦИИ
Цель работы: Изучить процесс интерпретации программы в среде CLIPS
4.1 Теоретические сведения
Теперь на простом примере познакомимся с возможностями, которые предоставляет среда разработки CLIPS в части отладки программы, состоящей из правил и фактов. Введите в текстовый файл правило, а затем загрузите этот файл в среду CLIPS.
(defrule start
(initial-fact) =>
(printout t "hello, world" crlf) )
Выполните команду reset. При выполнении команды reset все глобальные переменные получают начальные значения, определенные в конструкторе.
Введите эту команду в командной строке интерпретатора:
CLIPS> (reset)
либо выберите в меню команду Execution -> Reset, либо нажмите <CTRL+U> (последних два варианта возможны в версии, которая работает под Windows). Затем запустите интерпретатор. Для этого либо введите эту команду run в командную строку интерпретатора
CLIPS> (run)
либо выберите в меню команду Execution -> Run, либо нажмите <CTRL+R> (последних два варианта возможны в версии, которая работает под Windows).
В ответ программа должна вывести сообщение “hello, world”, знакомое всем программистам мира. Для повторного запуска программы повторите команды reset и run.
Если в меню Execution -> Watch ранее был установлен флажок Rules или перед запуском программы на выполнение вы ввели в командную строку команду watch rules, то на экране появится результат трассировки процесса выполнения:
CLIPS> (run) FIRE 1 start: f-0 hello, world
В этом сообщении в строке, начинающейся с FIRE, выведена информация об активизированном правиле: start – это имя правила, а f-0 – имя факта, который «удовлетворил» условие в этом правиле. Команда watch позволяет организовать несколько разных режимов трассировки, с деталями которых вы можете познакомиться в Руководстве пользователя. Если перед запуском программы вы ввели:
CLIPS> (dribble-on "dribble.dp")
TRUE
то выведенный протокол трассировки будет сохранен в файле dribble.dp. Сохранение протокола прекратится после ввода команды:
CLIPS> (dribble-off)
TRUE
Это очень удобная опция, особенно на этапе освоения языка.
Команда ppdefglobal выводит в диалоговое окно системы определение заданной глобальной переменной. Имя глобальной переменной должно быть задано без вопросительного знака и символов *, т.е. name для переменной
?*name*.
Команда list-defglobals предназначена для отображения в диалоговом окне списка имен всех определенных в системе глобальных переменных.
(list-defglobals [<имя-модуля>])
Если необязательный параметр <имя-модуля> не указан, то данная команда выводит имена глобальных переменных, определенных в текущем модуле. Если параметр содержит имя конкретного модуля, команда list-defglobal выводит список переменных, определенных в заданном модуле. Допускается использование символа *. В этом случае команда выведет в диалоговое окно имена всех глобальных переменные, определенных во всех модулях системы.
Команда show-defglobals, в отличие от команды list-defglobals, выводит в диалоговое окно CLIPS не только имена глобальных переменных, но и их значения. В остальном эти две команды практически идентичны.
(show-defglobals [ <имя-модуля> ])
Команда ppdeffunction выводит определение заданной функции на экран:
(ppdeffunction <имя-функции>)
Команда list-deffunctions предназначена для отображения в диалоговом окне списка имен всех определенных в системе функций:
(list-deffunctions)
4.2 Задание к работе
/*вставить в отладочный файл
(defrule start
(initial-fact) =>
(printout t "hello, world" crlf) )
*/
-
Загрузить в среду CLIPS программу и выполнить ее трассировку. Выполнить трассировку в файл.
(watch rules)
//Load buffer
(reset)
(run)
//трассировка в файл(сбрасываем clips)
(dribble-on “dribble.txt”)
(watch rules)
//Load buffer
(reset)
(run)
(dribble-off)
-
Загрузить в среду CLIPS программу и вывести информацию об объявленных глобальных переменных.
(defglobal
?*x* = 1
?*y* = 2
?*z* = 4.5)
(list-defglobals *)//вывод списка всех глобальных переменных(можно и без *)
(ppdefglobal z)//вывод значения переменной
-
Загрузить в среду CLIPS программу и вывести информацию о фактах и правилах.// не совсем понятно как вывести + в теории нет инфы, наверно подразумевалось вывести список функций
//вводим программу с фактами и правилами
(deffacts spisok (odin) (dva) (tri))
(reset)
(defrule spisok (odin) => (assert(exemple)))
(reset)
(run)
//вывел в файл, по другому не смог
(save-facts "factsfile.txt")
(save "rulesfile.txt")