Программирование на языке Пролог для искусственного интеллекта




Опасность бесконечного цикла - часть 2


Применение второго предложения из можетзавладеть

("может2") породило бы

(2)    ход( состояние( удвери, наполу, уокна, неимеет), М', S2'),

                можетзавладеть( S2')

С помощью хода перейти( уокна, Р2')

получилось бы

(3)    можетзавладеть( состояние( Р2', наполу, уокна, неимеет) )

Повторное использование предложения "может2" превратило бы список целей в

(4)    ход( состояние(Р2', наполу, уокна, неимеет), М'', S2''),

                можетзавладеть( S2")

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

        S2" = состояние( Р2", наполу, уокна, неимеет).

Поэтому список целей стал бы таким:

(5)    можетзавладеть( состояние( Р2'', наполу, уокна, неимеет) )

Применение предложения "может2" дало бы

(6)    ход( cocтояниe( P2", наполу, yoкнa, неимeeт), M" ', S2'' '),

                можетзавладеть( S2" ')

Снова первый было бы попробовано "перейти" и получилось бы

(7)    можетзавладеть( состояние( Р2" ', наполу, уокна, неимеет) )

Сравним теперь цели  (3),  (5)  и  (7).   Они похожи и отличаются лишь одной переменной, которая по очереди имела имена  Р',   Р''  и  P" '.  Как мы знаем, успешность цели не зависит от конкретных имен переменных в ней. Это означает, что, начиная со списка целей (3), процесс вычислений никуда не продвинулся. Фактически мы замечаем, что по очереди многократно используются одни и те же два предложения: "может2" и "перейти".


Содержание  Назад  Вперед