Управление поиском решений

Управление выполнением программы – это отход от декларативности в сторону процедурных свойств, что может возникнуть, например, при необходимости выполнения циклов. Пролог одинаково хорошо выполняет повторы и в процедурах, и в структурах данных.

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

Кроме переупорядочивания предложений существуют другие методы управления программой.

Система Пролог использует поиск с возвратом (откат), который выполняется автоматически для поиска решения программы, но это может привести к поиску заведомо ненужных решений, то есть снизить эффективность работы программы.

Иногда наоборот необходимо найти не одно решение, а много (несколько) решений.

Управление поиском решения можно рассматривать с процедурной точки зрения.

Тогда можно сказать, что циклические части программы записываются на Прологе либо в виде правил, которые используют откат, либо в виде правил, которые используют рекурсию.

Используя откат или рекурсию при решении задачи, можно получить один и тот же результат, хотя алгоритмы их выполнения различны. Конкретная ситуация диктует тот или иной выбор реализации циклических частей программы. Рисунок 5.1. демонстрирует оба способа реализации циклических частей программы и средства, которые используются в случае отката для управления логическим поиском.

 

 

Рис. 5.1.Два способа управления поиском решения

Есть несколько способов реализации повторов в Прологе. Наиболее удобными считаются два способа - откат после неудачи и отсечение и откат.