НАЗАД
Конкретизация стала бы следующей:
S2"=состояние( Р2", наполу, уокна, неимеет).
Поэтому список целей стал бы таким:
(5) можетзавладеть(состояние( Р2'',налолу,уокна, неимеет) )
Применение предложения «может2» дало бы
(6)ход(состояние(Р2'',наполу,уокна,неимеет),М"',S2"'),можетзавладеть(S2"')
Снова первым было бы попробовано «перейти» и получилось бы
(7) можетзавладеть(состояние(Р2''', наполу, уокна, неимеет) )
Сравним теперь цели (3), (5) и (7), Они. похожи и отличаются лишь одной переменной, которая по очереди имела имена Р', Р" и Р"'. Как мы знаем, успешность цели не зависит от конкретных имен переменных в ней. Это означает, что, начиная со списка целей (3), процесс вычислений никуда не продвинулся. Фактически мы замечаем, что по очереди многкратно используются одни и те же два предложения: «может2» и «перейти». Обезьяна перемещается, даже не пытаясь воспользоваться ящиком. Поскольку продвижения нет, такая ситуация продолжалась бы (теоретически) бесконечно: пролог-система не сумела бы осознать, что работать в этом направлении нет смысла.
Данный пример показывает, как пролог-система может пытаться решить задачу таким способом, при котором, решение никогда не будет достигнуто, хотя оно существует. Такая ситуация не является редкостью при программировании на Прологе. Да и при программировании на других языках бесконечные циклы не такая уж редкость. Что действительно необычно при сравнении Пролога с другими языками, так это то, что декларативная семантика пролог - программы может быть правильной, но в то же самое время ее процедурная семантика может быть ошибочной в том смысле, что с помощью такой программы нельзя получить правильный ответ на вопрос. В таких случаях система не способна достичь цели потому, что она пытается добраться до ответа, но выбирает при этом неверный путь.
Теперь уместно спросить: «Не можем ли мы внести какое-либо более существенное изменение в нашу программу, так чтобы полностью исключить опасность зацикливания? Или же нам всегда придется рассчитывать на удачный порядок предложений и целей?» Как оказывается, программы, в особенности большие, были бы через чур ненадежными, если бы можно было рассчитывать лишь на некоторый удачный порядок. Существует несколько других методов, позволяющих взбежать зацикливания и являющихся более общими и надежными, чем сам по себе метод упорядочивания. Такие методы будут систематически использоваться дальше в курсе, в особенности в тех главах, в которых пойдет речь о нахождении путей (в графах), о решении интеллектуальных задач и о переборе.
НАЗАД