![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Определение 6.11. Синтаксис предикатного ограничения
:<вызов-функции>
Таким образом, определение понятия "элемент", приведенное в предыдущем разделе, можно расширить следующим образом: Определение 6.12. Синтаксис понятия "элемент"
<элемент> ::= <константа>│ <простая-переменная>| <составная-переменная>| :<вызов-функции>
CLIPS предоставляет несколько готовых предикатных функций (см. гл. 15). Кроме этого, пользователь также может создавать свои собственные предикатные функции. Пример 6.20. Еще один вариант правила Find- data
(defrule Find-data (data?x&: (floatp?x)&:{>?x 0) $?y?z&:(stringp?z)) => (printout t "x="?x " y="?y " z="?z crlf))
Выше приведен еще один вариант правила Find-data. В данном случае ищется факт неявно созданного шаблона data, первое поле которого — вещественное число больше нуля, а последнее — строка. В нашем списке фактов такому правилу удовлетворяет только факт с индексом 1 — (data 1.0 blue "red"). Ограничения, возвращающие значения
В ограничениях возможно использование значений, возвращенных некоторыми функциями (в том числе и внешними). Вызов функции записывается с помощью знака = и указанной за ним функцией.
Замечание Функция сравнения также использует знак =. Разница между ними может быть определена по контексту.
Возвращаемое значение должно быть одним из простых типов данных CLIPS. Это значение, возвращенное функцией, объединяется с образцом так, как если бы оно было символьным ограничением. Заметьте, что функция вычисляется при каждом сопоставлении образцов, а не один раз при определении правила. Ограничения, возвращающие значения, имеют следующий синтаксис: Определение 6.13. Синтаксис ограничения, возвращающего значение
=<вызов-функции>
Определения понятия "элемент", приведенные в предыдущем разделе, примут такой вид: Определение 6.14. Синтаксис понятия "элемент"
<элемент> ::= <константа>│ <простая-переменная>| <составная-переменная>| :<вызов-функции> =<вызов-функции>
Правило из примера 6.21 выводит на экран такие факты data, в которых значение второго поля в два раза больше, чем значение первого. В нашем случае это факты (data 1 2) И (data 2 4). Пример 6.21. Использование ограничения, возвращающего значение
(assert (data I 2) (data 2 3) (data 24)) (defrule Find-data (data?x?y&=(* 2?x)) => (printout t "x="?x " y="?y crlf)) 6.5.3. Условный элемент or Условный элемент or позволяет активировать правило любым из нескольких заданных условных элементов. Если какой-нибудь из условных элементов, объединенных с помощью or, удовлетворен, то и все выражение or считается удовлетворенным. В этом случае, если все остальные условные элементы, входящие в левую часть правила (но не входящие в or), также удовлетворены, правило будет активировано. Условный элемент or может объединять любое количество элементов. Замечание Правило будет активировано для каждого выражения в условном элементе or, которое было удовлетворено. Таким образом, условный элемент or производит эффект, идентичный написанию нескольких правил с похожими посылками и следствиями. Определение 6.18. Синтаксис условного элемента or <условный-элемент-ог >::= (or <условный-элемент>+) Пример 6.25. Применение условного элемента or (defrule system-fault (error-status unknown) (or (temp high) (valve broken) (pump off)) => (printout t "The system has a fault." crlf)) Данное правило сообщит о поломке системы, если в списке фактов будет присутствовать факт error-status unknown и один из фактов temp high, valve broken или pump off. В случае если будут присутствовать два из этих трех фактов, например temp high и pump off, то сообщение будет выведено два раза. Заметьте, что приведенный пример — точный эквивалент следующих трех отдельных правил: Пример 6.26. Эквивалент правилу system-fault
(defrule system-fault-1 (error-status unknown) (pump off) => (printout t "The system has a fault." crlf)) (defrule system-fault-2 (error-status unknown) (valve broken) => (printout t "The system has a fault." crlf)) (defrule system-fault-3 (error-status unknown) (temp high) => (printout t "The system has a fault." crlf)) 6.5.4. Условный элемент and Все условные элементы в левой части правил CLIPS объединены неявным условным элементом and. Это означает, что все условные элементы, заданные в левой части, должны удовлетвориться, для того чтобы правило было активировано. С помощью явного применения условного элемента and можно смешивать различные условия and и or и группировать элементы так, как этого требует логика правил. Условие and удовлетворяется, только если все условия внутри явного and удовлетворены. В случае, если остальные условия в левой части правила также истинны, правило будет активировано. Элемент and может объединять любое число условных элементов.
|
||||||
Последнее изменение этой страницы: 2021-03-10; просмотров: 85; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.121.54 (0.007 с.) |