Программа состоит из трех частей: базы данных 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. Написать программу для следующего примера: для случайно выбранной птицы утверждается, что она умеет летать, но если птица – страус, то утверждается, что летать она не способна.