Information(Х):- person(Х).
Person (”Иванов И.И. любит заниматься спортом”).
Person (”Петров П.П. любит играть на гитаре”).
Person (”Васечкин В.В. любит прогулки на природе”).
Если сформулировать внешний целевой запрос:
Goal: information(Х),
то Пролог-система выдаст ответы в стандартной форме:
Х= “Иванов И.И. любит заниматься спортом”
Х=” Петров П.П. любит играть на гитаре”
Х= “Васечкин В.В. любит прогулки на природе”
Solution
Как следует модифицировать программу, чтобы получить сразу весь список людей, которые чем-то увлечены? Как организовать вывод в желаемой форме, а не использовать стандартный вывод? Один из путей заключается в использовании предиката fail для организации возврата.
Внесем следующие изменения в программу:
Clauses
Information1:- person (Х), write(X), nl, fail.
/*fail добавлен к правилу*/
Information1:- write(”конец”), nl.
/*второе правило – завершающее условие*/
Person (”Иванов И.И. любит заниматься спортом”).
Person (”Петров П.П. любит играть на гитаре”).
Person (”Васечкин В.В. любит прогулки на природе”).
|
|
В первое правило information1 включен предикат fail, который констатирует неудачу и порождает возврат к получению нового решения. Во втором правиле information1 содержится завершающее условие, которое обеспечивает успешное завершение выполнения всего правила.
Если сформулировать внешний целевой запрос: