Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 121; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.) |