то получим ответы вот в такой форме:
“Иванов И.И. любит заниматься спортом”
“Петров П.П. любит играть на гитаре”
“Васечкин В.В. любит прогулки на природе”
“конец”
Общие принципы проектирования повторяющегося процесса при организации возврата с помощью предиката fail следующие:
- первое(-ые) правило в определении рабочее и включает предикат fail для инициирования возврата;
- последнее в определении утверждение всегда имеет значение ”истина” и обеспечивает успешное завершение возвратов.
Такой способ организации повторяющего процесса возможен только, если в теле рабочего правила есть хотя бы один предикат, для которого в базе знаний имеется несколько вариантов согласований. Структура повторяющегося процесса зависит от количества предикатов в теле рабочего правила, имеющих несколько вариантов успешного согласования с целью. Если таких предикатов два и более, то получаются вложенные циклы.
5.4. Создание бесконечных альтернатив при помощи предиката repeat
Предикат repeat предназначен для организации повторяющихся процессов в том случае, когда в теле правила нет многократно согласующихся с базой знаний предикатов, и должен быть описан в программе следующим образом:
|
|
Clauses
Repeat.
Repeat:- repeat.
Рекурсивное определение является петлей (циклом). Это целевое утверждение всегда согласуется с базой знаний, так как имеется факт repeat (первое утверждение в определении). В процессе возврата целевое утверждение repeat может быть согласовано бесконечное число раз, благодаря наличию рекурсивно определенного правила. Выполнение правила, в котором находится repeat, закончится успешно только в том случае, если все целевые утверждения, стоящие после repeat, в процессе согласования с базой знаний окажутся истинными, иначе возникает бесконечный цикл. При организации повторяющихся процессов предикат repeat можно использовать и в том случае, когда в теле правила нет многократно согласующихся с базой знаний предикатов.
Пример. Программа запрашивает у пользователя цифру и выводит ее на экран. Затем запрашивает ”Продолжить? Да/Нет”. Если ”да”, то снова запрашивает цифру, если ”нет” – то прекращает работу.
Predicates
Start
Run
Conec(string)
Repeat
Goal
Start.
Clauses
Repeat.