Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Переменные, связанные с простыми и составными полями
Групповые символы заменяют любые поля образца и могут принимать какие угодно значения этих полей. Значение поля может быть связано с переменными для последующего сопоставления, отображения и других действий. Это выполняется с помощью применения имени переменной следующим непосредственно после группового символа. Таким образом, синтаксис ограничения, применяемого в образце, примет следующий вид:
Определение 6.8. Синтаксис ограничений
<ограничение>::= <символьное-ограничение > | ? │ $? │ <переменная-простого-поля>| <переменная-составного-поля> <переменная-простого-поля> ::=?<имя-переменной> <переменная-составного-поля>::= $?<имя-переменной>
Имя переменной должно быть значением типа symbol и обязательно начинаться с буквы. В имени переменной не разрешается использовать кавычки, т. е. строка не может использоваться как имя переменной или ее часть.
Правила сопоставления образцов при использовании переменных в ограничениях образца аналогичны правилам, использующимся для групповых символов. В момент первого появления имени переменной она ведет себя так же, как и соответствующий групповой символ. В этот момент CLIPS связывает значения поля с заданной переменной. Эта связь будет действовать только в рамках правила, в котором она возникла. Каждое правило имеет свой собственный список имен переменных со значениями, связанными с ними, эти переменные локальны для правил. Связанные переменные могут быть использованы во внешних функциях. Символ $ имеет особое значение в левой части правил — этот оператор отображает, что некоторая, возможно пустая, последовательность полей требует сопоставления. В правой части правила символ $ ставится перед переменной для обозначения того, что перед использованием переменной в качестве аргумента функции необходимо раскрыть последовательность полей, содержащихся в переменной. Таким образом, при использовании переменных в качестве параметров функций (как в левой, так и правой части правил) перед именем переменной, содержащей значение составного поля, не должен стоять символ $ (за исключением случаев, когда требуется раскрыть последовательность полей). При использовании переменной, содержащей значение составного поля, в других случаях, перед ее именем должен стоять символ $. Нельзя применять переменную составного поля при операциях с простым полем образца шаблона или объекта.
В качестве примера введите в среду CLIPS следующее правило: Пример 6.14. Правило Find-data
(defrule Find-data (data? blue?x $?y) => (printout t "Found data (data ? blue "?x " "?y ")" crlf))
Выполните команды reset и run. Если правило было введено в систему без ошибок, то на экране появится следующий результат:
Пример 6.15. Результат работы правила Find- data
Found data (data? blue red (6.9)) Found data (data? blue RED ()) Found data (data? blue red ()} Found data (data? blue red ()}
Образцу, заданному в правиле, удовлетворяют четыре факта с индексами 1, 3, 4, 5. В результате активации правило выводит на экран свойства фактов, активировавших правило. Значение переменной, содержащей значение из составного поля, выводится в скобках. Кроме первого случая (факта с индексом 5), переменная содержит пустое значение. Переменную составного поля не обязательно использовать в качестве последнего ограничения. Рассмотрим следующее правило: Пример 6.16. Модифицированное правило Find- data
(defrule Find-data (data?x $?y?z) => (printout t "x="?x " y="?y " z="?z crlf)) Заданному образцу удовлетворяют все факты data, но обратите внимание, каким образом связываются значения с переменной у в разных случаях:
Пример 6.17. Результат работы модифицированного правила Find- data
х=1.0 y=(blue) z=red х=1 у=() z=blue х=1 y=(blue) z=red х=1 y=(blue) z=RED х=1 y=(blue red) z=6.9
После того как произошло связывание переменной со значением, все ссылки на эту переменную возвращают значение, с которым переменная была связана. Это действительно как для переменных, связанных с составными полями, так и для переменных, связанных с простыми полями. Кроме того, допустимы ссылки между образцами в одном правиле. Пример 6.18. Правило Find-2-Coeval-Person
(defrule Find-2-Coeval-Person
(person (name?x) (age?z)) (person (name?y) (age &z)) => (printout t "name="?x " name="?y " age="?z crlf))
Приведенное выше правило Find-2-Coevai-person выведет на экран всевозможные пары имен людей (все перестановки) одинакового возраста. Как научить это правило не выводить эквивалентные по смыслу или бессмысленные пары одинаковых имен (Bob-Bob), мы увидим в следующих разделах.
Связывающие ограничения
CLIPS предоставляет 3 связывающих ограничения, предназначенных для объединения отдельных ограничений и переменных в единое целое: & (логическое И), | (логическое ИЛИ) и ~ (логическое НЕ). Ограничение & удовлетворяется, если два соседних ограничения удовлетворяются. Ограничение | удовлетворяется, если любое из двух соседних ограничений удовлетворяется. Ограничение ~ удовлетворяется, если следующее за ним ограничение не удовлетворяется. Связывающие ограничения могут комбинироваться почти произвольным образом и в любом количестве. Ограничение ~ имеет наивысший приоритет, далее следуют & и |. В случае одинакового приоритета ограничение вычисляется слева направо. Существует одно исключение из правил приоритета, которое применяется при связывании переменных. Если первое ограничение — это переменная и за ней следует &, то переменная является отдельным ограничением. Ограничение?x&red|blue вычисляется как?х& (red|blue), в то время как по правилам приоритета оно должно было вычисляться как (?x&red) (blue. Связанные ограничения имеют следующий синтаксис:
|
||||||
Последнее изменение этой страницы: 2021-03-10; просмотров: 44; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.189.177 (0.007 с.) |