
- •Министерство образования и науки Российской Федерации
- •Задание на лабораторную работу
- •Задание на лабораторную работу
- •Задание на лабораторную работу
- •Порядок выполнения работы
- •Задание на лабораторную работу
- •Задание на лабораторную работы
- •Дополнительная литература
- •Периодическая литература
- •Интернет-ресурсы
Задание на лабораторную работу
Пусть множество Е={1, 2, …, 100} определяет возраст человека. Подмножество А «Молодой» можно задать функцией принадлежности:
.
Написать программу, которая по возрасту человека определяет, к какой категории он относится:
молодой:
;
среднего возраста:
;
старый:
.
Программа должна содержать две функции:
функция запрашивает у пользователя возраст человека, получает значение возраста, вызывает функцию, реализующую функцию принадлежности, и выводит на экран категорию, к которой принадлежит человек;
реализует функцию принадлежности, получает в качестве аргумента возраст человека, вычисляет степень принадлежности данного возраста подмножеству молодой и возвращает данный результат.
Порядок выполнения работы
В редакторе CLIPSсоздать функцию, которая получает в качестве аргумента возраст человека, вычисляет степень принадлежности данного возраста подмножеству молодой и возвращает данный результат.
В редакторе CLIPSсоздать функцию, которая функция запрашивает у пользователя возраст человека, получает значение возраста, вызывает функцию из п.1, выводит на экран категорию, к которой принадлежит человек
Проверить результат работы программы для разных входных данных.
Требования к отчету
Разработанный программный модуль на языке CLIPSс комментариями
Результаты выполнения программного модуля
Выводы.
Контрольные вопросы
Какие логические функции используются в языке CLIPS?
Назовите операторы ввода/вывода.
Как организуется в CLIPSконструкция «если-то»?
Лабораторная работа №4
Работа с основными функциями в CLIPS
Цель: изучить конструктор языка CLIPSдля создания правил, функции для реализации цикла
Вопросы для предварительного изучения
1. Изучить материал лекции 4.
2. Ознакомиться с материалом основной литературы.
3. Ознакомиться с материалами дополнительной литературы.
Краткие теоретические сведения
(while<выражение> [do] <действие>*)
Для задания условия в выражении цикла while могут быть использованы любые предикатные функции. В теле цикла может содержаться произвольное количество действий, включая вложенные циклы или функцию if. Проверка условия выполняется перед выполнением тела цикла. Цикл выполняется до тех пор, пока условие остается истинным. Определение цикла while может содержать необязательный символ do между условием и первым действием тела цикла. Для прерывания работы цикла могут быть использованы функции break и return, описанные ниже. Если для прерывания работы цикла не использовалась функция return, функция while возвращает значение false.
Помимо функции while CLIPS предоставляет также функцию loop-for-count, которая реализует концепцию простого итеративного цикла, выполняющего определенные действия заданное число раз.
(loop-for-count <диапазон> [do] <действие>*)
<диапазон>::= <максимальное-значение-индекса>| (<переменная-цикла> [<минимальное-
значение-индекса><максимальное-значение-индекса>] ) |(<переменная-цикла> [<максимальное-значение-индекса>] )
<минимальное-значение-индекса> ::= <целочисленное-выражение>
<максимальное-значение-индекса> ::= <целочисленное-выражение>
Цикл loop-for-count производит указанные действия некоторое количество раз согласно заданному параметру <диапазон>. Если параметр <минимальное-значение-индекса> не задан, ему автоматически присваивается 1. CLIPS предусматривает наличие параметра <переменная-цикла>, определяющего имя локальной переменной, которая может использоваться в теле цикла для определения текущего числа итераций. В теле цикла могут быть указаны любые внешние по отношению к циклу переменные (как глобальные, так и локальные). Однако при совпадении имени переменной цикла с какой-нибудь внешней переменной внешняя переменная скрывается. Использование переменной цикла после завершения работы функции loop-for-count вне тела цикла запрещено. Определение цикла может содержать необязательный символ do между условием и первым действием тела цикла. Если параметр <минимальное-значение-индекса> изначально больше параметра <максимальное-значение-индекса>, тело цикла не будет выполнено ни разу. Функции break и return могут быть использованы для экстренного прерывания работы цикла. В теле цикла может содержаться произвольное количество действий, включая вложенные циклы или функцию if. Функция loop-for-count возвращает значение false, если для экстренного прерывания ее работы не использовалась функция return. Пример функции loop-for-count приведен ниже (см. также рис. 15.19).
Для добавления новых правил в базу знаний CLIPS предоставляет специальный конструктор defrule. В общем виде синтаксис данного конструктора можно представить следующим образом:
(defrule
<имя-правила>
[<комментарии>]
[<определение-свойства-правила>]
<предпосылки > ; левая часть правила
=>
<следствие> ; правая часть правила
)
Имя правила должно быть значением типа symbol. В качестве имени правила нельзя использовать зарезервированные слова CLIPS, которые были перечислены ранее. Повторное определение существующего правила приводит к удалению правила с тем же именем, даже если новое определение содержит ошибки.
Комментарии являются необязательными, и, как правило, описывают назначения правила. Комментарии необходимо заключать в кавычки. Эти комментарии сохраняются и в дальнейшем могут быть доступны при просматривании определения правила.
Определение правила может содержать объявление свойств правила, которое следует непосредственно после имени правила и комментариев. Более подробно свойства правила будут рассмотрены ниже.
В справочной системе и документации по CLIPS для обозначения предпосылок правила чаще всего используется термин "LHS of rule", а для обозначения следствия "RHS of rule", поэтому в дальнейшем мы будем использовать аналогичную терминологию — левая и правая часть правила.
Левая часть правила задается набором условных элементов, который обычно состоит из условий, примененных к некоторым образцам. Заданный набор образцов используется системой для сопоставления с имеющимися фактами и объектами. Все условия в левой части правила объединяются с помощью неявного логического оператора and. Правая часть правила содержит список действий, выполняемых при активизации правила механизмом логического вывода. Для разделения правой и левой части правил используется символ =>. Правило не имеет ограничений на количество условных элементов или действий. Единственным ограничением является свободная память вашего компьютера. Действия правила выполняются последовательно, но тогда и только тогда, когда все условные элементы в левой части этого правила удовлетворены.
Если в левой части правила не указан ни один условный элемент, CLIPS автоматически подставляет условие-образец initial-fact или initial-object. Если в правой части правила не определено ни одно действие, правило может быть активировано и выполнено, но при этом ничего не произойдет.