Определение 15.59. Функция return 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Определение 15.59. Функция return



(return [<выражение>])

При использовании функции return в правой части правила текущий фокус удаляется из стека фокусов. Эта функция не может быть указана в качестве аргументов другой функции. Допустимо применение return в функциях, выполняющих действия над набором объектов (do-for-instance, do-for-all-instances и delayed-do-for-all-instances). Однако в этом случае она выполняется, только если подобные действия допустимы окружением соответствующей функции.

Функция break прерывает текущую итерацию циклов while и loop-for-count, работу функций progn и progn$ и некоторых функций, выполняющих действия над набором объектов (do-for-instance, do-for-all-instances и delayed-do-for-all-instances). Функция break не должна использоваться в рамках функции progn, если это является недопустимым, исходя из внешнего контекста progn. Кроме того, функция break не должна указываться в качестве параметра обращения к другой функции.

Определение 15.60. Функция break

(break)

Функция switch реализует оператор множественного ветвления и позволяет связать определенную группу действий (среди нескольких подобных групп) с некоторой заданной величиной. При выборе этой величины выполняет связанные с ней действия.

Определение 15.61. Функция switch

(switch <выражение>)

<условие-ветвления>*

[<условие>])

<условие-ветвления>       ::= (case <выражение> then <действие>*)

<действия-по-умолчанию>::= (default действие>*)

Для эффективного применения функции switch необходимо наличие, по крайней мере, трех альтернативных групп действий, зависящих от заданного условного выражения.

Функция switch в первую очередь проводит вычисление аргумента <выражение>, а затем сравнивает его со всеми условиями ветвления по очереди. Если значение заданного выражения совпадает с одним из условий ветвления, выполняются соответствующие действия, и работа функции за­вершается. Если совпадений обнаружить не удалось, функция возвращает результат последнего сеанса выбора (если таковой имеется) или значение false. Ниже приведен пример использования функции switch (см. также рис. 15.21).

Пример 15.24. Использование функции switch

(defglobal?*x* = 0)

(defglobal?*y* = 1)

(def function foo (?val)

(switch?val

(case?*x* then *x*)

(case?*y* then *y*)

(default none)))

(foo 0)

(foo 1)

(foo 2)

Рис. 15.21. Использование функции switch

 

 

Лабораторная работа №1

Тема: Знакомство с оболочкой CLIPS

Задание 1. Протестировать пример.

Программа состоит из трех частей: базы данных basic _ state, описываемой конструкцией deffacts; шаблонов фактов fact и action; пяти правил work, rest, good _ rest, take _ umbrella, take _ sunglasses.

В базе данных содержаться сведения о предметной области: какой сегодня день (будний или выходной) и какая погода (в данном примере не учитываются все разновидности погоды, а только знания о том, солнечная погода или дождливая). Сведения представлены в виде набора шаблонных фактов. Поле subject первого факта указывает на то, что речь идет о дне (day); поле property выходной — содержит значение свойства дня (day_off). Поле subject второго факта указывает на то, что речь идет о погоде (weather); поле property содержит значение солнечная (sunny). Правило — свойства погоды work определяет, нужно ли идти на работу. Правило активизируется, если будет выполнено условие "день будний", то есть если в базе данных будет факт (fact (subject day)(property weekday)). В этом случае в базу данных будет добавлен факт (action (to_do "go to work")), а также на экран будет выведено соответствующее сообщение командой printout.

Правила rest и good_rest определяют выходной. Первое правило — альтернативные действия в случае, если день активизируется единственным условием в списке LHS (достаточно, чтобы в базе данных был факт (fact (subject day)(property day_off))), в то время как второе правило активизируется, если будут удовлетворены два условия в списке LHS, то есть, если в базе данных будут факты, свидетельствующие, во–первых, что день выходной, во-вторых, что погода не дождливая. В нашем примере день — выходной, то чему отдать предпочтение: — активизированы оба эти правила, налицо конфликт отдыху дома или прогулке? Выбор приоритетного правила будет зависеть от стратегии разрешения конфликтов. Можно воспользоваться предусмотренным CLIPS свойством выпуклости и добавить, например, в правило rest после имени правила строку (declare (salience 10)), придав ему выпуклость 10, что сделает это правило приоритетным по сравнению с good_rest со значением выпуклости, равным 0 по умолчанию. Однако было бы предпочтительнее усовершенствовать программу, разделив контексты, в которых используются эти правила. Например, в контексте_1 (для человека ленивого) приоритетным действительно было бы остаться дома (активизация правила rest), а в контексте_2 (для человека активного) приоритетной была бы прогулка (активизация правила good_rest). Каждый контекст можно было бы обрабатывать отдельно.

 

 

Задание 2. Написать программу для следующего примера: для случайно выбранной птицы утверждается, что она умеет летать, но если птица – страус, то утверждается, что летать она не способна.

Задание 3. Написать программу для своего примера.

 

Лабораторная работа №2

Тема: Разработка упрощенной базы знаний

Результаты лабораторной работы должны быть представлены в виде отчета о выполненной лабораторной работе. Отчет должен содержать:

- описание сценария работы экспертной системы для предметной области задания;

- описание фактов и целей разрабатываемой базы знаний;

- описание ограничений для правил вывода на разрабатываемой базе знаний;

- логическую схему вывода на разрабатываемой базе знаний;

- базу знаний, закодированную на языке продукционных правил.



Поделиться:


Последнее изменение этой страницы: 2021-03-10; просмотров: 71; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.109.151 (0.006 с.)