Управление поиском решений
Управление выполнением программы – это отход от декларативности в сторону процедурных свойств, что может возникнуть, например, при необходимости выполнения циклов. Пролог одинаково хорошо выполняет повторы и в процедурах, и в структурах данных.
Было показано, что можно управлять выполнением программы, изменяя порядок следования предложений и целей. Это изменение могло повлиять на эффективность программы и в некоторых ситуациях могло привести к бесконечным рекурсивным вызовам. Это было показано и в программе о нахождении отдаленных предков, и в программе о нахождении стран, не имеющих общих границ.
Кроме переупорядочивания предложений существуют другие методы управления программой.
Система Пролог использует поиск с возвратом (откат), который выполняется автоматически для поиска решения программы, но это может привести к поиску заведомо ненужных решений, то есть снизить эффективность работы программы.
Иногда наоборот необходимо найти не одно решение, а много (несколько) решений.
Управление поиском решения можно рассматривать с процедурной точки зрения.
Тогда можно сказать, что циклические части программы записываются на Прологе либо в виде правил, которые используют откат, либо в виде правил, которые используют рекурсию.
Используя откат или рекурсию при решении задачи, можно получить один и тот же результат, хотя алгоритмы их выполнения различны. Конкретная ситуация диктует тот или иной выбор реализации циклических частей программы. Рисунок 5.1. демонстрирует оба способа реализации циклических частей программы и средства, которые используются в случае отката для управления логическим поиском.
Рис. 5.1.Два способа управления поиском решения
Есть несколько способов реализации повторов в Прологе. Наиболее удобными считаются два способа - откат после неудачи и отсечение и откат.