Логические нейронные сети



         

ПРОЛОГ-программа - часть 3


брат (X, P), родитель (P, Y).

К первому предикату этого фрейма применяем аналогичные действия, получаем фрейм

мужчина (X), родитель (Q, X), родитель (Q, P), X<>P, родитель (P,Y)

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

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

родитель (Q, иван), родитель (Q, P), иван <>P, родитель (P,Y).

Обращаемся к процедуре "родитель", начиная второй уровень ветвления. Первый клоз этой процедуры

родитель (марья, иван) определяет дальнейшее связывание переменных:

родитель (марья, Р), иван <> P, родитель (P, Y).

Вновь входим в процедуру "родитель" (третий уровень ветвления), находим клоз родитель (марья, иван) . Трансформируем цель — получаем новый фрейм:

иван <> иван, родитель (иван, Y).

Получаем противоречие, т.е. не проходит унификация.

Ищем на данном шаге ветвления другой вариант связывания, находим следующий клоз:

родитель (марья, василий).

Трансформируем цель:

иван <> василий, родитель (василий, Y)

родитель (василий, Y).

Вновь входим в процедуру "родитель", но не находим там клоза, в котором василий указан как чей-либо родитель. Т.е. вновь не проходит унификация — установление совместимости варианта связывания переменных.

Возвращаемся на шаг ветвления назад. (Реализуем стратегию поиска с ветвлением и возвращением назад

— "backtraking".) На втором уровне ветвления пробуем клоз, в котором иван указан как сын: родитель (петр, иван) . Цель трансформируется в следующий фрейм:

родитель (петр, Р), иван <> P, родитель (P, Y).




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