Введение. (allowed-values red yellow green)))
(allowed-values red yellow green))) CLIPS> (assert (circle (name c-1) (center 1 2))) <Fact-1> CLIPS> (assert (circle (name c-2) (center 1))) [CSTRNCHK1] Literal slot values found in the assert command does not satisfy the cardinality restrictions for slot center. CLIPS> (facts) f-0 (initial-fact) f-1 (circle (name c-1) (radius 1) (center 1 2) (color red)) For a total of 2 facts. По умолчанию система CLIPS проверяет ограничения во время анализа текста команды, а не во время ее выполнения. Поэтому, если значение слота определить только на основе анализа текста самой команды невозможно (например, если это значение задается переменной), то соответствующие ограничения не проверяется. Чтобы включить проверку во время выполнения (в дополнение к проверке при анализе текста) используется команда set-dynamic-constraint-checking. Проверка во время выполнения служит лишь для диагностики; на результат выполнения команды она влияет. Пример: CLIPS> (reset) CLIPS> (bind?r abc) abc CLIPS> (assert (circle (name c-1) (radius?r) (center 0 0))) <Fact-1> CLIPS> (set-dynamic-constraint-checking TRUE) FALSE CLIPS> (assert (circle (name c-2) (radius?r) (center 1 0))) [CSTRNCHK1] Slot value abc found in fact f-2 does not match the allowed types for slot radius. <Fact-2> CLIPS> (facts) f-0 (initial-fact) f-1 (circle (name c-1) (radius abc) (center 0 0) (color red)) f-2 (circle (name c-2) (radius abc) (center 1 0) (color red)) For a total of 3 facts. Помимо команд assert и retract с шаблонными фактами можно использовать команды duplicate и modify. Команда duplicate добавляет в список фактов новый факт, полученный путем копирования существующего. Первый параметр команды должен быть номером или адресом копируемого факта, а остальные параметры — вложенными списками, определяющими значения слотов нового факта. Если какой-либо слот в команде duplicate не указан, то его значение берется из копируемого факта. Команда modify имеет те же параметры, что и команда duplicate но отличается от последней тем, что удаляет копируемый факт. Пример: CLIPS> (reset) CLIPS> (assert (circle (name c-1) (radius 5) (center 1 2))) <Fact-1> CLIPS> (watch facts) CLIPS> (duplicate 1 (name c-2)) ==> f-2 (circle (name c-2) (radius 5) (center 1 2) (color red)) <Fact-2> CLIPS> (modify 2 (radius 7)) <== f-2 (circle (name c-2) (radius 5) (center 1 2) (color red)) ==> f-3 (circle (name c-2) (radius 7) (center 1 2) (color red)) <Fact-3> Введение Система CLIPS (C Language Integrated Production System) — это инструментальное средство для разработки экспертных систем. Система CLIPS использует одноименный язык программирования. Основными компонентами CLIPS, как и большинства экспертных систем являются: · список фактов (он же рабочая память) — данные, описывающие решаемую задачу. Вообще говоря, факты могут выражать не только специфические особенности конкретной решаемой в данный момент задачи, но и общие закономерности, характерные для некоторого класса задач; · база знаний — набор правил, служащих для получения на основе одних (исходных) фактов других (результатных) фактов; · машина логического вывода — обеспечивает общее управление процессом применения правил. В простейшем случае работа с системой CLIPS происходит в интерактивном режиме. После запуска на экране появляется окно консоли (называемое Dialog Window), в котором отображается приглашение для ввода команд в виде CLIPS>. Команды выполняются системой по мере их ввода. Каждая команда представляет собой список. В языке CLIPS списки заключаются в круглые скобки, а элементы списка отделяются друг от друга пробелами. Элементами списков могут быть: · атомы: o целые и вещественные числа (состоят из цифр и, возможно, десятичной точки и знака экспоненты); o строки (произвольный текст, заключенный в двойные кавычки); o символы — все остальное, что не является ни числом, ни строкой и не содержит разделителей (т. е. пробелов, круглых скобок). Отметим, что вместе символы и строки называются лексемами; · вложенные списки. Вообще говоря, списки могут быть пустыми. Если список представляет собой команды (т. е., если он сам не является элементом другого списка), то первый элемент списка задает название команды, а остальные — ее параметры. Т. е. в общем случае команда имеет формат: (имя-команды аргумент-1 аргумент-2 …) Имя команды должно быть символом. Одна команда может занимать несколько строк.
|