Cтраница 1
Вынуждаемый возврат приемлем только тогда, когда процедуры, которые должны повторяться, совершают свои действия через побочные эффекты. [1]
Вынуждаемый возврат используется для того, чтобы Пролог исчерпывающим образом выдавал все возможные варианты согласования и повторного согласования цели. Результаты, которые механизм возвратов должен был бы уничтожать, мы можем накапливать с помощью побочного эффекта действия предикатов assert и retract. Это накопление реализуется процедурой, которая структурируется с помощью указанного метода. [2]
Это реализует вынуждаемый возврат. Для фиксации числа согласований нашей цели мы будем использовать счетчик, который будет представлять собой утверждение, хранимое в базе данных Пролога. Первым аргументом вызова процедуры подсчет членов / 2 является структура, указывающая на тех членов организации, число которых должно быть подсчитано, а вторым аргументом является целое число - ответ на наш вопрос. [3]
Применение механизма вынуждаемого возврата для принуждения процедур предикатов-утилит генерировать все допустимые результаты и печатать точки входа в дневник преподавателя. [4]
Процедура использует модификацию базы данных для накапливания результатов посредством вынуждаемого возврата. Процедура для предиката проход по графу / 1 представляет этап накопления; а процедура для предиката сбор вершин / 1 - этап сбора результатов. [5]
В процедурах показать элементы / 4 утилиты регистрируе-мая дата / 1 и а интервале целых / 3 генерируют допустимые даты и начальные времена, если при вызове цели Дата или S являются переменными и мы используем механизм вынуждаемого возврата для генерации всех правильных значений. Утилиты генерируют альтернативные значения в хронологическом порядке, как это и требуется. [6]
При построении процедуры для предиката продолжение игры / 3 была использована рекурсивная структура, так как нам хотелось в качестве второго аргумента иметь структуру, представляющую игровую доску, а результат игры возвращать в качестве третьего аргумента. Вынуждаемый возврат мы применяем в процедуре подготовить ход пользователя / 2 для того, чтобы управлять диалогом, который должен повторяться до тех пор, пока пользователь не введет допустимый ход. [7]
Альтернативой рекурсии как средству структурирования программы может служить совместное использование предикатов fail и repeat. При получении результатов с помощью вынуждаемого возврата ставка делается на побочные эффекты, так. [8]
Рассмотренная структура обычно широко используется в интерактивных программах, взаимодействующих с пользователем в стиле диалога. Приведенный метод структуризации будем называть вынуждаемым возвратом и поместим его в наш инструментальный ящик программиста. [9]
Наилучшим способом выражения того, как работает процедура, является ссылка на методы из инструментального ящика программиста, которые были использованы при ее разработке. Если процедура строилась с помощью анализа состояний, следует выразить утверждения в терминах обработки состояний; если был использован вынуждаемый возврат, на первый план следует выдвинуть подцели, генерирующие значения, подцели, побочным эффектом которых является выдача значений, и подцели, инициирующие возврат. Следует также выделить заключительное значение, прекращающее процесс возврата. Нет необходимости документировать хорошо описанные процедуры более детально, чем так, как рекомендуется выше. Для читающего программу, который знает декларативную интерпретацию предиката и понимает методы, реализованные в процедуре, она будет вполне ясной, чтобы увидеть средства достижения ее конца. Но в том случае, когда процедура включает в себя нестандартные механизмы или хитрые трюки, их, несомненно, нужно объяснить. Так, мы считаем, что реализация процедуры для предиката исключить переменные / 2, данная в разд. [10]