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