Управление средой
Простое или составное значение.
Введение Система CLIPS (C Language Integrated Production System) — это инструментальное средство для разработки экспертных систем. Система CLIPS использует одноименный язык программирования. Основными компонентами CLIPS, как и большинства экспертных систем являются: · список фактов (он же рабочая память) — данные, описывающие решаемую задачу. Вообще говоря, факты могут выражать не только специфические особенности конкретной решаемой в данный момент задачи, но и общие закономерности, характерные для некоторого класса задач; · база знаний — набор правил, служащих для получения на основе одних (исходных) фактов других (результатных) фактов; · машина логического вывода — обеспечивает общее управление процессом применения правил. В простейшем случае работа с системой CLIPS происходит в интерактивном режиме. После запуска на экране появляется окно консоли (называемое Dialog Window), в котором отображается приглашение для ввода команд в виде CLIPS>. Команды выполняются системой по мере их ввода. Каждая команда представляет собой список. В языке CLIPS списки заключаются в круглые скобки, а элементы списка отделяются друг от друга пробелами. Элементами списков могут быть: · атомы: o целые и вещественные числа (состоят из цифр и, возможно, десятичной точки и знака экспоненты); o строки (произвольный текст, заключенный в двойные кавычки); o символы — все остальное, что не является ни числом, ни строкой и не содержит разделителей (т. е. пробелов, круглых скобок). Отметим, что вместе символы и строки называются лексемами; · вложенные списки. Вообще говоря, списки могут быть пустыми. Если список представляет собой команды (т. е., если он сам не является элементом другого списка), то первый элемент списка задает название команды, а остальные — ее параметры. Т. е. в общем случае команда имеет формат: (имя-команды аргумент-1 аргумент-2 …) Имя команды должно быть символом. Одна команда может занимать несколько строк. Арифметика Простейшими командами являются математические функции. Например:
(* (+ 1 2) 3 (* 4 5)) (sin (/ (pi) 6)) В командах CLIPS могут использоваться переменные. Для присваивания значения переменной используется команда bind. Например: (bind?x 10) ?x (**?x 2) Заметим, что команда bind не только устанавливает значение переменной, но и возвращает установленное значение. При попытке использовать переменную, которой не было присвоено никакого значения, выводится предупреждение, при этом значением такой переменной считается символ FALSE. Ввод-вывод при работе с консолью Для вывода в консоль или в файл можно использовать команду printout. Первый параметр этой команды задает логическое имя файла, а остальные — выводимые значения. Для вывода в консоль первым параметром надо задать символ t. Для перевода строки используется символ crlf. Пример: (printout t "Hello" crlf) (printout t "2 * 3 = " (* 2 3) crlf) Для ввода можно использовать команды read и readline. Будучи вызваны без параметров обе команды производят ввод с консоли. Команда read считывает данные до разделителя и может возвратить символ, строку или число; команда readline считывает данные до конца строки и всегда возвращает строку. В случае достижения конца файла обе команды возвращают символ EOF. Пример: (bind?x (read)) Управление средой Помимо математических функций в CLIPS другие команды. Перечислим некоторые из них: · exit — завершение работы с системой CLIPS. В меню соответствует File/Exit; · batch — выполняет команды, записанные в текстовом файле так, как если бы они были введены непосредственно в консоли. Имя файла задается параметром команды и должно является строкой (т. е. в двойных кавычках). В меню соответствует File/Load Batch…; · batch* — то же, что batch, но без повтора самих выполняемых команд на экране; · reset — сброс системы. В меню соответствует Execution/Reset. Пример: (batch "C:/Some folder/Some command file.bat") Факты Система CLIPS поддерживает два вида фактов: упорядоченные и шаблонные. Для работы с обоими видами фактов используются одни и те же команды; однако использование шаблонных фактов требует предварительного описания шаблона, в то время как для использования упорядоченных фактов ничего такого не надо. Для ввода в список фактов используется команда assert, параметрами которой должны быть вводимые факты (отметим, что нет разницы, вводить ли несколько фактов одной командой или каждый факт — отдельной). В команде assert каждый факт должен быть задан отдельным списком. Первый элемент этого списка определяет тип факта и должен быть символом; остальные элементы задают параметры факты и могут быть произвольного типа. Если в списке, задающем факт, встречается вложенный список, то он интерпретируется как вызов функции, значение которой определяет значение соответствующего параметра факта. Пример: (assert (weather fine)) (assert (temperature 5)) (assert (wind 7 north-east)) (assert (autumn)) (assert (location box-1 floor) (size box-1 80 60 40)) (assert (weight part-1 4.5) (weight part-2 8.25)) (assert (weight part-3 (+ 1.5 3.25))) В списке фактов может одновременно находится несколько фактов одного типа, если эти факты различаются значением хотя бы одного параметра. Команда assert возвращает адрес факта, если он был успешно введен в список фактов или символ FALSE, если факт не был введен из-за того, что точно такой же факт уже находился в списке фактов. Возвращаемый командой assert адрес факта не является ни числом, ни символом, ни строкой; — это значение специального типа данных. Адрес факта может быть использован, например, для удаления факта из списка фактов. Помимо адреса каждый факт, находящийся в списке фактов, характеризуется номером. Получить этот номер, зная адрес факта можно с помощью функции fact-index. Отметим, что изначально список фактов не пуст: в нем присутствует факт initial-fact, не имеющий параметров. Номер этого факта — 0. Просмотреть список фактов можно командой facts. По умолчанию (т. е. без параметров) эта команда выводит на экран весь список фактов; однако с помощью параметров можно задать минимальный и максимальный номер факта, а также максимальное количество выводимых фактов. Пример: (facts) (facts 7) (facts 1 2) Также для просмотра списка фактов в меню можно выбрать Window/Facts. В этом случае на экране появится окно Facts, отображающее текущее содержимое списка фактов. По мере добавления и удаления фактов содержимое этого окна автоматически обновляется. Для удаления фактов используется команда retract, параметрами которой являются адреса или номера удаляемых фактов либо символ * (звездочка), предписывающий удаление всех фактов. Команда retract ничего не возвращает. Пример: (bind?f (assert (weather fair))) (retract?f) (retract 0) Также к удалению всех фактов приводит использование команды reset (ранее упомянутой). После удаления всех фактов команда reset автоматически добавляет в список фактов факт initial-fact.
|